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

如何在Pandas DataFrame中合并多列并清理空值(文本数值混合)

解决Pandas混合数据列合并问题

针对你要把17列含文本、百分比的混合数据(大量空值,交替出现)合并为一列,同时保留Column A的需求,直接用以下两种方法就能搞定:

方法一:用bfill逐行填充取非空值

这种方法适合每一行只有一个非空值的场景(比如你说的Column B和C交替空值),效率很高:

  1. 先构造示例数据(模拟你的场景):
import pandas as pd
import numpy as np

data = {
    'Column A': ['行1', '行2', '行3', '行4'],
    'Column B': ['文本1', np.nan, '30%', np.nan],
    'Column C': [np.nan, '数值2', np.nan, '文本4'],
    # 补充剩下15列空值模拟17列的情况
    **{f'Column {chr(68+i)}': [np.nan]*4 for i in range(15)}
}
df = pd.DataFrame(data)
  1. 执行合并操作:
# 选中要合并的17列(排除Column A)
merge_columns = df.columns.drop('Column A')
# 逐行从左到右填充空值,取每一行的第一个非空值作为新列
df['新Column B'] = df[merge_columns].bfill(axis=1).iloc[:, 0]
# 保留需要的列,删除原17列
df = df[['Column A', '新Column B']]

方法二:逐行聚合取第一个非空值

如果担心某些行存在多个非空值(你场景里应该没有),可以用这种更严谨的方式,只取每行第一个非空值:

merge_columns = df.columns.drop('Column A')
df['新Column B'] = df[merge_columns].agg(
    lambda row: row.dropna().iloc[0] if not row.dropna().empty else np.nan,
    axis=1
)
df = df[['Column A', '新Column B']]

补充说明

  • 两种方法都能保留原数据格式(不管是文本还是百分比字符串),不会因为混合类型报错;
  • 如果有行所有17列都是空值,新列会显示NaN,可以用df['新Column B'] = df['新Column B'].fillna('无数据')替换成你需要的默认值;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:20:00