我意识到这两个类似的问题:
我使用了一种不同的方法来替换值,我认为它应该是最简洁的方法。但它不起作用。我知道如何解决它,但我想了解为什么它不起作用:
In [108]: df=pd.DataFrame([[1, 2, 8],[3, 4, 8], [5, 1, 8]], columns=['A', 'B', 'C'])
In [109]: df
Out[109]:
A B C
0 1 2 8
1 3 4 8
2 5 1 8
In [110]: df.loc[:, ['A', 'B']].replace([1, 3, 2], [3, 6, 7], inplace=True)
In [111]: df
Out[111]:
A B C
0 1 2 8
1 3 4 8
2 5 1 8
In [112]: df.loc[:, 'A'].replace([1, 3, 2], [3, 6, 7], inplace=True)
In [113]: df
Out[113]:
A B C
0 3 2 8
1 6 4 8
2 5 1 8
如果我只切割一个列 In [112]
,它与切割多个列 In [110]
的结果不同。根据我对 .loc
方法的理解,它返回的是视图而不是副本。在我的逻辑中,这意味着对切片进行原地更改应该会改变整个 DataFrame。这就是在代码行 In [110]
发生的事情。
columns=['A','B','C']
。 - EdChumdf.loc[:, 'A': 'B'].replace([1, 3, 2], [3, 6, 7], inplace=True)
是可以工作的,但似乎由于某种原因会引发“正在尝试在 DataFrame 的切片副本上设置值”的警告。 - EdChumdf.loc[:, 'A': 'B'].replace
的方式工作,因为它与df.loc[:, ['A', 'B']].replace
相同。 - EdChumdf.loc[:, ['A', 'B']] = df.loc[:, ['A', 'B']].replace([1, 3, 2], [3, 6, 7])
并将其写入Pandas错误报告。 - mcocdawc