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

Pandas实现num列为空字符串时将其右侧相邻列同步置空

问题分析与正确实现

原有代码错误点

  • 行列索引逻辑颠倒:enumerate(df.columns)拿到的idx是列的顺序索引,你把它作为行索引传给iloc的第一个参数,完全混淆了行和列的定位逻辑
  • 混淆了比较和赋值操作:df[idx+1,col] == ''是相等判断语句,不会执行赋值,赋值需要使用单等号=
  • 索引语法错误:pandas不支持df[列索引, 列名]这种直接索引方式,运行会直接报错

正确实现思路

  1. 先筛选出所有列名包含num的列
  2. 对每一个符合要求的列,先确认它不是最后一列(存在右侧相邻列)
  3. 定位到该列值为空字符串的所有行,将这些行对应的右侧相邻列值统一置为空

完整可运行代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:01