You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据列名开头字符批量替换Pandas数据框中的0值?

批量替换Pandas中列名以'-'开头的列的0值为'-'

问题描述

现有如下Pandas DataFrame:

Index1 Index2  -2  -1   0   1   2  -1 ph  -2 ph  1 ph  2 ph
0      A      W   0   0  28  29  18    -28    -28     1   -10
1      B      X   0  20  26  21  27     -6    -26    -5     1
2      C      Y  19  20  20  17  17      0     -1    -3    -3
3      D      Z  15   0  15  18  18    -15      0     3     3

需要将所有列名以'-'开头的列中的0替换为'-',目标效果如下:

Index1 Index2  -2  -1   0   1   2 -1 ph -2 ph  1 ph  2 ph
0      A      W   -   -  28  29  18   -28   -28     1   -10
1      B      X   -  20  26  21  27    -6   -26    -5     1
2      C      Y  19  20  20  17  17     -    -1    -3    -3
3      D      Z  15   -  15  18  18   -15     -     3     3

当前通过手动逐个列执行替换,代码如下:

import pandas as pd

# Create DataFrame
data = {'Index1': ['A', 'B', 'C', 'D'],
        'Index2': ['W', 'X', 'Y', 'Z'],
        '-2': [0, 0, 19, 15],
        '-1': [0, 20, 20, 0],
        '0': [28, 26, 20, 15],
        '1': [29, 21, 17, 18],
        '2': [18, 27, 17, 18]
        }

df = pd.DataFrame(data)
df = df.assign(**df[['-1','-2','1', '2']].sub(df['0'], axis=0).add_suffix(' ph'))


df['-1'].replace(to_replace=0, value='-', inplace=True)
df['-2'].replace(to_replace=0, value='-', inplace=True)
df['-1 ph'].replace(to_replace=0, value='-', inplace=True)
df['-2 ph'].replace(to_replace=0, value='-', inplace=True)

但列名可能会变化(比如新增-3、-3 ph等列),需要优化代码实现自动识别列名以'-'开头的列,批量替换其中的0为'-'。

优化方案

可以通过列表推导式筛选出所有列名以'-'开头的列,然后批量执行替换操作,无需手动指定列名:

import pandas as pd

# Create DataFrame
data = {'Index1': ['A', 'B', 'C', 'D'],
        'Index2': ['W', 'X', 'Y', 'Z'],
        '-2': [0, 0, 19, 15],
        '-1': [0, 20, 20, 0],
        '0': [28, 26, 20, 15],
        '1': [29, 21, 17, 18],
        '2': [18, 27, 17, 18]
        }

df = pd.DataFrame(data)
df = df.assign(**df[['-1','-2','1', '2']].sub(df['0'], axis=0).add_suffix(' ph'))

# 自动筛选列名以'-'开头的列
target_cols = [col for col in df.columns if col.startswith('-')]
# 批量替换0为'-'
df[target_cols] = df[target_cols].replace(0, '-')

print(df)

代码解释

  1. 筛选目标列:使用列表推导式遍历DataFrame的所有列名,通过startswith('-')筛选出以'-'开头的列,存入target_cols列表。
  2. 批量替换:直接对筛选出的列执行replace(0, '-')操作,一次性完成所有目标列的替换,无需逐个列手动处理。

这样无论后续新增多少个以'-'开头的列,代码都能自动识别并处理,提升了代码的灵活性和可维护性。

内容的提问来源于stack exchange,提问作者z star

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:55:03