基于相同列值合并行:解决Pandas中NaN引发的字符串拼接报错
问题:合并重复行并拼接diagnosis列内容
原始数据集:
id name phone diagnosis 0 1 archie 12345 healthy 1 2 betty 23456 dead 2 3 clara 34567 NaN 3 3 clara 34567 kidney 4 4 diana 45678 cancer
期望得到的目标数据集:
id name phone diagnosis 0 1 archie 12345 healthy 1 2 betty 23456 dead 2 3 clara 34567 NaN, kidney 3 4 diana 45678 cancer
尝试执行以下代码时出现预期字符串但找到浮点型的错误:
data = data.groupby(['id','name','phone'])['diagnosis'].apply(', '.join).reset_index()
需要实现重复行合并,将同一组的diagnosis条目拼接成字符串。
解决方案
错误原因是diagnosis列中的NaN是浮点类型,而', '.join()只能处理字符串元素。解决思路是先将NaN转换为字符串形式的'NaN',再执行分组拼接:
方法一:先处理列再分组
import pandas as pd # 将diagnosis列的NaN值转为字符串'NaN' data['diagnosis'] = data['diagnosis'].fillna('NaN') # 按id、name、phone分组,拼接diagnosis内容 data = data.groupby(['id','name','phone'])['diagnosis'].apply(', '.join).reset_index()
方法二:在分组时直接处理
如果不想修改原数据集的diagnosis列,可以在apply中直接处理NaN:
import pandas as pd data = data.groupby(['id','name','phone'])['diagnosis'].apply(lambda x: ', '.join(x.fillna('NaN'))).reset_index()
两种方法都能得到目标结果,将同一组的diagnosis内容用逗号分隔拼接。
内容的提问来源于stack exchange,提问作者sppokky
相关产品推荐
相关产品推荐

