给定两个示例数据帧:
df0 = pd.DataFrame([('a', 1, 1000),
('b', 2, 1200),
('d', 100, 1500)],
columns=['L','A','ADA'])
df1 = pd.DataFrame([('a', 1, 2, 1000),
('b', 2, 100, 1200),
('d', 100, 2, 1500)],
columns=['L','A','A','ADA'])
如果值大于 10
,我想替换所有名为 A
的列中的值。
片段
df = df0
df.loc[df['A'] > 10, 'A'] = np.nan
完美地工作,而应用于第二个数据帧的相同方法不起作用
df = df1
df.loc[df['A'] > 10, 'A'] = np.nan
因为 df['A']
返回两列。
有没有什么方法可以处理这两种情况?
虽然重命名列是一个选项(我不想),但这就是数据的格式化方式(我无法控制它),但在实际代码库中重命名数据会导致许多问题。我正在寻找可以处理这种情况的解决方案。
如果有两列同名是一个问题,pandas 接受这个的原因是什么?
最佳答案
您可以使用numpy.where
替换所有重复
列:
In [2405]: df1
Out[2405]:
L A A ADA
0 a 1 2 1000
1 b 2 100 1200
2 d 100 2 1500
In [2405]: import numpy as np
In [2406]: df1.A = np.where(df1.A.gt(10), np.nan, df1.A)
In [2407]: df1
Out[2407]:
L A A ADA
0 a 1.0 2.0 1000
1 b 2.0 NaN 1200
2 d NaN 2.0 1500
关于python - 按条件替换 pandas 数据框列中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64886014/