python - 按条件替换 pandas 数据框列中的值

标签 python python-3.x pandas dataframe

给定两个示例数据帧:

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/

相关文章:

python - 在 python 中对 "FileNotFoundError"进行单元测试

pandas 平均每行大小为 5 的 block

python - 计算 Pandas 中零序列的长度

c# - 未调用泛型的 Pythonnet 委托(delegate)方法

python - Python从邮件中提取域名(包括几个特例)

python - 为 Pydantic 模型字段指定不同的输入类型(以逗号分隔的字符串输入作为字符串列表)

python - 尝试合并具有多种条件的 DataFrame

python - 我如何使用 QTime() 制作时间计数器

python - 排序数据框后更新索引

python - 如何对 Pandas 中的多列进行分组和聚合