代码之家  ›  专栏  ›  技术社区  ›  Victor Valente

.loc[索引,列]和.loc[索引][列]有什么区别?

  •  0
  • Victor Valente  · 技术社区  · 6 年前

    # python 3.7.1, pandas 0.23.4.
    
    import pandas as pd
    df = pd.DataFrame({'col1':range(1,5), 'col2': [5, '', 7, '']})
    
    missing_values_index = df[df['col2'] == ''].index
    

    列1 价值观 二氧化碳

    方法1(不起作用,df保持不变):

    df.loc[missing_values_index]['col2'] = df.loc[missing_values_index]['col1']
    



    方法2(工作正常):

    df.loc[missing_values_index, 'col2'] = df.loc[missing_values_index, 'col1']
    



    我以为这只是写同一件事的两种方式。有人能解释一下这里到底发生了什么吗?

    0 回复  |  直到 6 年前
        1
  •  0
  •   Amir Shabani    6 年前

    你提到的第二种方法“工作正常”,那么让我们谈谈为什么第一种方法不起作用!

    核心 问题是当我们试图将一个值赋给 ,而不是对象本身。我可以这样重写你的第一个方法:

    something = df.loc[missing_values_index]
    something['col2'] = df.loc[missing_values_index]['col1']
    

    现在是问题显现的时候了。根据 documentation ,它 知道第一行创建 view 或者 copy . 这就是为什么它会抛出 SettingWithCopy