如果你这样做了
>>> df = pd.DataFrame(np.arange(0,9), columns=['count'])
>>> df.iloc[0:5]['group'] = 'a'
>>> df
Out[346]:
count
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
不会设置任何值。但是,如果你第一次
>>> df['group'] = 'b'
>>> df.iloc[0:5]['group'] = 'a'
>>> df
Out[353]:
count group
0 0 a
1 1 a
2 2 a
3 3 a
4 4 a
5 5 b
6 6 b
7 7 b
8 8 b
对我来说,这是意想不到的行为。无论我是否使用iloc
子选择一些列,我都希望这样做是可行的。但是,如果这不起作用,至少我预期会出现错误/警告。唯一一次我不希望设置任何值,也不希望出现任何警告的情况是,当我使用索引设置一些值时,索引实际上不存在于左侧。你知道吗
我来了
>>> pd.__version__
Out[355]: '0.14.0rc1-51-gccd593f'
不,这不是窃听器:当你打电话的时候
“引擎盖下”实际上是两个电话:
而且,如您所见,
df
根本没有改变。但是,通过这样做:实际上您更改了
df
,如果此时print df
,您将得到另一列b
:所以当你继续做的时候:
您正在更改刚刚添加到
df
的列。你知道吗正如杰夫在上面的评论中提到的,根据docs:
进一步:
这意味着熊猫的设计者允许不同的行为(返回一个视图和返回一个副本),可能是为了达到性能,为了不陷入这种意想不到的行为,他们在文档中警告你,并提供了“正确”的使用方式,即
df.loc[0:5,'group'] = 'a'
总之,这不是一个错误-它是“设计的”
相关问题 更多 >
编程相关推荐