如何拼接包含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
相关产品推荐
相关产品推荐

