首页 > 解决方案 > 按条件替换熊猫数据框列中的值

问题描述

给定两个示例数据框:

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'])

A如果值大于 ,我想替换所有列中的值10

片段

df = df0
df.loc[df['A'] > 10, 'A'] = np.nan

完美地工作,而同样适用于第二个数据框则不起作用

df = df1
df.loc[df['A'] > 10, 'A'] = np.nan

因为df['A']返回两列。

有什么方法可以同时处理这两种情况吗?

虽然重命名列是一种选择(我宁愿不这样做),但这就是数据的格式(我无法控制),在实际代码库中重命名数据会导致许多问题。我正在寻找可以处理这种情况的解决方案。

如果有两个同名的列是一个问题,熊猫接受这个的原因是什么?

标签: pythonpython-3.xpandasdataframe

解决方案


您可以使用numpy.where替换所有duplicate列:

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

推荐阅读