热线电话:13121318867

登录
2019-03-14 阅读量: 845
loc [index,col]和.loc [index]

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

# 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

我尝试了两种方法将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']

现在问题出现了。根据文档,不知道第一行是创建a view还是a copy。这就是它SettingWithCopy发出警告并阻止你分配的原因; 因为如果熊猫不能确定你的作业有效,它就不能让你这样做!

0.0000
4
关注作者
收藏
评论(0)

发表评论

暂无数据
推荐帖子