当前位置:  开发笔记 > 编程语言 > 正文

Pandas替换特定列上的值

如何解决《Pandas替换特定列上的值》经验,为你挑选了1个好方法。

我知道这两个类似的问题:

熊猫取代了价值观

Pandas:替换数据帧中的列值

我使用了一种不同的方法来替换值,我认为它应该是最干净的值.但它不起作用.我知道如何解决它,但我想理解为什么它不起作用:

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].



1> mcocdawc..:

以下是其中一位开发人员的回答:https://github.com/pydata/pandas/issues/11984

这应该理想地显示一个SettingWithCopyWarning,但我认为这很难检测.

你永远不应该做这种类型的链式就地设置.这简直是​​不好的做法.

惯用的是:

In [7]: df[['A','B']] = df[['A','B']].replace([1, 3, 2], [3, 6, 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']],但如上所述更清楚.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有