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

如何拼接包含NaN值的Pandas字符串列?

Pandas字符串列拼接(跳过缺失值)

原始数据

import pandas as pd
import numpy as np

mydict = {
    'col1' : ['a', 'b', 'c'],
    'col2' : ['d', np.NaN, 'e'],
    'col3' : ['f', 'g', 'h']
}

mydf = pd.DataFrame(mydict)

尝试的错误代码

mydf['concat'] = mydf[['col1', 'col2', 'col3']].apply('-'.join, axis=1)

报错信息

TypeError: sequence item 0: expected str instance, float found

问题分析

报错核心原因是np.NaN属于float类型,而'-'.join()要求所有拼接元素必须是字符串类型;同时需求需要跳过缺失值,只保留非空字符串进行拼接。

解决方案

方法1:apply结合列表推导式过滤缺失值

遍历每行数据,先过滤掉NaN值,再对剩余字符串进行拼接:

mydf['concat'] = mydf[['col1', 'col2', 'col3']].apply(
    lambda x: '-'.join([val for val in x if pd.notna(val)]),
    axis=1
)

方法2:agg方法结合dropna过滤

利用dropna()直接移除每行的缺失值,再完成拼接:

mydf['concat'] = mydf[['col1', 'col2', 'col3']].agg(
    lambda x: '-'.join(x.dropna()),
    axis=1
)

最终结果

执行上述任意方法后,得到的DataFrame与期望一致:

concat_dict = {
    'col1' : ['a', 'b', 'c'],
    'col2' : ['d', np.NaN, 'e'],
    'col3' : ['f', 'g', 'h'],
    'concat' : ['a-d-f', 'b-g', 'c-e-h']
}
concat_df = pd.DataFrame(concat_dict)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 05:00:27