Python pandas合并多列为单列并忽略NaN与空值的实现方法
问题根源
直接对全列执行astype(str)时,pandas会把缺失值NaN转为字符串'nan',空字符串也会完整保留,拼接后自然会出现多余的nan和空格。
可行解决方案
方案1(兼容性最佳,适配所有pandas版本)
通过apply逐行过滤无效值后拼接,代码逻辑简单易懂:
df['abc'] = df[['a', 'b', 'c']].apply( lambda row: ' '.join([val for val in row.astype(str) if val not in ('', 'nan')]), axis=1 )
运行后自动过滤空字符串、NaN转成的无效'nan'字符串,无有效内容的行最终输出为空字符串,完全匹配预期结果。
方案2(性能更优,适合万行以上大数据量)
先统一预处理无效值,再批量拼接降低遍历开销:
# 先把所有缺失值、空字符串统一处理 tmp_df = df[['a', 'b', 'c']].fillna('').replace('', pd.NA) # 按行拼接自动跳过空值 df['abc'] = tmp_df.agg(lambda x: x.str.cat(sep=' '), axis=1)
注意:如果业务场景中存在合法的字符串
'nan'需要保留,请使用方案2,避免方案1误删有效内容。
内容的提问来源于stack exchange,提问作者Chubaka
相关产品推荐
相关产品推荐

