【发布时间】:2021-06-05 11:21:57
【问题描述】:
查询:我需要将数据框中的一堆列(不是所有列)的 1 个旧值替换为 1 个新值。问题是关于要使用的语法。有没有更短的语法?
示例数据框:
df = pd.DataFrame({'A': [0,1,2,3,4],
'B': [5,6,7,0,9],
'C': [2,0,9,3,0],
'D': [1,3,0,5,2]})
我需要将上述 df 中的所有 0 替换为 10,但仅适用于 A 列和 C 列(不适用于 B 或 D)。
我用来执行此操作的代码:
方法 1:两个单独的命令。
df['A'].replace({0:10},inplace=True)
df['C'].replace({0:10},inplace=True)
方法二:字典中使用字典的一条命令
df.replace({'A': {0:10}, 'C': {0:10}},inplace=True)
方法 3:将新值排除在字典之外
df.replace({'A':0,'C':0},10,inplace=True)
预期结果:
A B C D
0 10 5 2 1
1 1 6 10 3
2 2 7 9 0
3 3 0 3 5
4 4 9 10 2
我能够使用所有三种方法获得预期的结果。但我有疑问,我们能否给出一个列列表并输入旧值和新值进行一次替换?
类似:
df.replace({['col_ref'...]:{'old':'new'})
#OR
df['col_ref'...].replace()
在我的场景中,52 列中有 26 列需要替换,值将通过正则表达式命令替换。现在我可以将正则表达式命令存储为变量并使用方法 2 来执行此操作。但这也需要输入变量名 26 次。有没有更短的方法可以让我输入这 26 列和正则表达式替换 {'r':'r2'} 一次?
【问题讨论】:
标签: python-3.x dataframe replace