如何在Pandas中合并含空值的两列?解决TypeError报错问题
问题原因及解决方法
报错根源
- 类型不匹配:pandas读取Excel时,空值会被解析成float类型的NaN,而
','.join()要求所有拼接元素必须是字符串。如果x/y列里有数字(int/float)或者NaN,直接用原元素拼接就会触发TypeError。 - 空值判断逻辑有坑:你的列表推导式
[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
相关产品推荐
相关产品推荐

