Python 什么';.loc[index,col]和.loc[index][col]之间的区别是什么?

Python 什么';.loc[index,col]和.loc[index][col]之间的区别是什么?,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有这样一个数据帧,第一列是“密集的”,第二列是“稀疏的”: #python 3.7.1,pandas 0.23.4。 作为pd进口熊猫 df=pd.DataFrame({'col1':范围(1,5),'col2':[5','7',']}) 缺少\u值\u index=df[df['col2']==''。索引 我尝试了两种方法将col1值分配给col2缺少的值 方法1(不起作用,df保持不变): df.loc[missing_values_index]['col2']=df.loc[mi

假设我有这样一个数据帧,第一列是“密集的”,第二列是“稀疏的”:

#python 3.7.1,pandas 0.23.4。
作为pd进口熊猫
df=pd.DataFrame({'col1':范围(1,5),'col2':[5','7',']})
缺少\u值\u index=df[df['col2']==''。索引

我尝试了两种方法将col1值分配给col2缺少的值

方法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']



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

您提到的第二种方法“很好用”,那么让我们来谈谈第一种方法不起作用的原因吧

我认为问题的核心是当我们试图为对象的副本而不是对象本身赋值时。我可以这样重写您的第一个方法:

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

现在是问题出现的时候了。根据,不知道第一行创建了
视图
副本
。这就是为什么它会抛出一个带有copy的
设置
警告,并阻止您分配;因为如果熊猫不能确定你的作业是否有效,它就不能让你去做

您提到的第二种方法“很好用”,那么让我们来谈谈第一种方法不起作用的原因吧

我认为问题的核心是当我们试图为对象的副本而不是对象本身赋值时。我可以这样重写您的第一个方法:

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

现在是问题出现的时候了。根据,不知道第一行创建了
视图
副本
。这就是为什么它会抛出一个带有copy的
设置
警告,并阻止您分配;因为如果熊猫不能确定你的作业是否有效,它就不能让你去做

详细解释了差异及其后果。另外,请阅读链接作业的文档()。打印时显示相同的内容,分配时显示不一样。我的答案解决了您的问题吗?如果是这样,请随意接受。详细解释了差异及其后果。另外,请阅读链接作业的文档()。打印时显示相同的内容,分配时显示不一样。我的答案解决了您的问题吗?如果是这样,请随意接受。