DataFrame分组聚合报错TypeError,转字符串后问题仍存在
解决方法
1. 先清理空值再做字符串拼接
直接用astype(str)会把NaN转成字符串'NaN',既冗余还可能引发异常。正确步骤是先把NaN替换为空字符串,再转换类型,最后过滤空值后拼接:
# 替换空值并转换为字符串类型 df['quartier_av'] = df['quartier_av'].fillna('').astype(str) # 分组聚合,过滤空字符串后完成拼接 result = df.groupby(['ville','arrondissement','quartier'])['quartier_av'].agg(lambda x: ','.join(filter(None, x))).reset_index()
2. 直接生成列表(匹配你的需求)
你明确要求quartier_av以列表形式呈现,没必要做字符串拼接,直接聚合为列表即可,同时过滤掉NaN值:
import pandas as pd # 分组后聚合为不含NaN的纯列表 result = df.groupby(['ville','arrondissement','quartier'])['quartier_av'].agg(lambda x: [val for val in x if pd.notna(val)]).reset_index()
这样得到的quartier_av列就是标准列表类型,不会包含无效的空值。
排查转类型后仍报错的原因
如果执行df['quartier_av']=df['quartier_av'].astype(str)后还是触发错误,先检查这两个点:
- 执行
print(df['quartier_av'].dtype)确认列类型确实是object(pandas中字符串以object类型存储) - 执行
df['quartier_av'].unique()查看是否存在非字符串/非数值的异常元素,比如None或自定义对象,这类元素需要提前清理
内容的提问来源于stack exchange,提问作者bravopapa
相关产品推荐
相关产品推荐

