python – Pandas替换特定列上的值
发布时间:2020-12-20 12:09:51 所属栏目:Python 来源:网络整理
导读:我知道这两个类似的问题: Pandas replace values Pandas: Replacing column values in dataframe 我使用了一种不同的方法来替换值,我认为它应该是最干净的值.但它不起作用.我知道如何解决它,但我想理解为什么它不起作用: In [108]: df=pd.DataFrame([[1,2,
我知道这两个类似的问题:
Pandas replace values Pandas: Replacing column values in dataframe 我使用了一种不同的方法来替换值,我认为它应该是最干净的值.但它不起作用.我知道如何解决它,但我想理解为什么它不起作用: In [108]: df=pd.DataFrame([[1,2,8],[3,4,[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],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,inplace=True) In [113]: df Out[113]: A B C 0 3 2 8 1 6 4 8 2 5 1 8 如果我只在[112]中切割一列,则在[110]中切割多个列的工作方式不同.据我了解.loc方法,它返回一个视图而不是一个副本.在我的逻辑中,这意味着在切片上进行原位更改应该更改整个DataFrame.这就是在[110]行中发生的事情. 解决方法
以下是其中一位开发人员的回答:
https://github.com/pydata/pandas/issues/11984
这应该理想地显示一个SettingWithCopyWarning,但我认为这很难检测. 你永远不应该做这种类型的链式就地设置.这简直是??不好的做法. 惯用的是: In [7]: df[['A','B']] = df[['A',7]) In [8]: df Out[8]: A B C 0 3 7 8 1 6 4 8 2 5 3 8 (你可以使用df.loc [:,[‘A’,’B’]],但如上所述更清楚. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |