【问题标题】:Use of Replace() in Python Dataframe for Multiple Columns but same value在 Python 数据框中使用 Replace() 用于多列但值相同
【发布时间】: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


    【解决方案1】:

    我试过了。

    for col in [list of columns]:
        df.replace({col:{'r':'r2'}},regex=True,inplace=True)
    

    这是我能想到的编写最少代码字符的最短方法。

    但是,如果有更快的方法,欢迎其他答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-27
      • 2019-11-28
      • 1970-01-01
      相关资源
      最近更新 更多