Pandas实现num列为空字符串时将其右侧相邻列同步置空
问题分析与正确实现
原有代码错误点
- 行列索引逻辑颠倒:
enumerate(df.columns)拿到的idx是列的顺序索引,你把它作为行索引传给iloc的第一个参数,完全混淆了行和列的定位逻辑 - 混淆了比较和赋值操作:
df[idx+1,col] == ''是相等判断语句,不会执行赋值,赋值需要使用单等号= - 索引语法错误:pandas不支持
df[列索引, 列名]这种直接索引方式,运行会直接报错
正确实现思路
- 先筛选出所有列名包含
num的列 - 对每一个符合要求的列,先确认它不是最后一列(存在右侧相邻列)
- 定位到该列值为空字符串的所有行,将这些行对应的右侧相邻列值统一置为空
完整可运行代码
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'colAnum': ['123', '', '891'], 'colB': ['House', 'Car', 'Chair'], 'colCnum': ['456', '789', ''], 'colD': ['Book', 'Table', 'Porch'] }) # 筛选所有列名带num的列 num_cols = [col for col in df.columns if 'num' in col] for col in num_cols: # 获取当前列的位置索引 col_pos = df.columns.get_loc(col) # 跳过最后一列,避免无右侧列的情况 if col_pos + 1 >= len(df.columns): continue # 右侧相邻列名 right_col = df.columns[col_pos + 1] # 批量将当前num列为空的行的右侧列置空 df.loc[df[col] == '', right_col] = '' # 打印结果 print(df)
运行输出结果
colAnum colB colCnum colD 0 123 House 456 Book 1 789 Table 2 891 Chair
内容的提问来源于stack exchange,提问作者John Taylor
相关产品推荐
相关产品推荐

