如何根据列名开头字符批量替换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)
代码解释
- 筛选目标列:使用列表推导式遍历DataFrame的所有列名,通过
startswith('-')筛选出以'-'开头的列,存入target_cols列表。 - 批量替换:直接对筛选出的列执行
replace(0, '-')操作,一次性完成所有目标列的替换,无需逐个列手动处理。
这样无论后续新增多少个以'-'开头的列,代码都能自动识别并处理,提升了代码的灵活性和可维护性。
内容的提问来源于stack exchange,提问作者z star
相关产品推荐
相关产品推荐

