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

如何在Pandas中合并含空值的两列?解决TypeError报错问题

问题原因及解决方法

报错根源

  1. 类型不匹配:pandas读取Excel时,空值会被解析成float类型的NaN,而','.join()要求所有拼接元素必须是字符串。如果x/y列里有数字(int/float)或者NaN,直接用原元素拼接就会触发TypeError。
  2. 空值判断逻辑有坑:你的列表推导式[i for i in x if i]会把数值0也过滤掉(因为0在布尔判断里是False),如果业务里0是合法值,这会导致数据丢失。

修正后的代码

方案一:先统一转字符串+处理空值,再合并

import pandas as pd

df = pd.read_excel('input.xlsx')
# 把x、y列转为字符串,同时将NaN替换为空字符串
df[['x', 'y']] = df[['x', 'y']].astype(str).replace('nan', '', regex=False)
# 只拼接非空且非空白的内容
df['z'] = df[['x', 'y']].apply(lambda x: ','.join([val for val in x if val.strip()]), axis=1)
print(df)

方案二:更简洁的写法(用fillna和agg)

import pandas as pd

df = pd.read_excel('input.xlsx')
# 先把空值填充为空字符串,转成字符串后直接按行拼接
df['z'] = df[['x', 'y']].fillna('').astype(str).agg(','.join, axis=1)
# 处理极端情况:比如两列都空时避免出现空逗号,或者多连续逗号
df['z'] = df['z'].str.replace('^,|,$', '', regex=True).str.replace(',+', ',', regex=True)
print(df)

补充说明

  • 转成字符串是因为合并后的z列一般作为文本使用,不会影响原数值的可读性(比如数字123转成"123"完全没问题)。
  • 如果需要保留数值类型的特殊处理,可以在拼接前单独判断元素类型,但大部分场景下转字符串就能满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:05:17