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

如何合并Pandas DataFrame中含Null值的字符串列?

问题分析

你遇到的问题很典型:当DataFrame中存在None(在pandas里会被自动转换为NaN)时,直接用+做字符串拼接会导致整行结果变成NaN——这是因为pandas中任何涉及NaN的字符串运算都会返回NaN,哪怕只有一个空值,整个拼接结果就会失效。

解决方案

我们可以通过逐行过滤非空值再拼接的方式解决这个问题,这里提供两种简洁的实现方式:

方法1:直接过滤None值拼接

先筛选出所有以val开头的列,然后逐行处理,只保留非空值进行拼接:

import pandas as pd

# 初始化你的DataFrame
df = pd.DataFrame({'id':[1,2,3,4], 'val1':['21','22','3','35'], 'val2':['99',None,'91','67'], 'val3':['21','45','76','88']})

# 筛选所有以val开头的列
val_columns = [col for col in df.columns if col.startswith('val')]

# 逐行拼接非空值
df['val'] = df[val_columns].apply(lambda row: ','.join(item for item in row if item is not None), axis=1)

方法2:先填充空值再过滤空字符串

如果你的DataFrame中可能同时存在None和空字符串,可以先将None填充为空字符串,再过滤掉空内容后拼接:

# 筛选目标列的另一种写法
val_columns = df.filter(like='val').columns

# 填充空值后拼接非空内容
df['val'] = df[val_columns].fillna('').apply(lambda row: ','.join(item for item in row if item), axis=1)

最终结果

运行上述代码后,你会得到完全符合预期的输出:

id val1  val2 val3          val
0   1   21    99   21  21,99,21
1   2   22  None   45     22,45
2   3    3    91   76   3,91,76
3   4   35    67   88  35,67,88

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:05:20