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

Pandas groupby拼接字符串报TypeError:预期str实例找到float如何解决

问题原因

  • 报错TypeError: sequence item 8: expected str instance, float found的核心原因是Kod pocztowy (PNA)列存在空值NaN,NaN本身属于float类型,哪怕整列的dtype是object,空值的类型仍然是float,拼接字符串时就会触发类型错误。
  • 之前修改的lambda x: ",".join(str(x))错误原因是:这里的x是分组后的Series对象,直接对x做str(x)会把整个Series的打印文本(包含索引、列名、类型信息)整体转为字符串,再按单个字符拆分拼接,自然会得到不符合预期的结果。

问题定位(可选)

如果需要确认空值的分布,可以执行以下代码快速找到异常行:

# 筛选出邮编列为空的所有行
invalid_postcode_rows = db[db['Kod pocztowy (PNA)'].isna()]
print(f"空邮编行数:{len(invalid_postcode_rows)}")
print(invalid_postcode_rows.head())

修复方案

方案1:直接修复lambda逻辑,单元素转字符串

把转字符串的操作作用于分组内的每个元素,而非整个Series:

db_miasto = db.groupby(
    ['Województwo', 'Powiat', 'Gmina', 'Miejscowość (GUS)', 'Kod gminy', 'Kod miejscowości'], 
    as_index=False
)['Kod pocztowy (PNA)'].agg(
    # 只拼接非空的邮编,避免出现无意义的'nan'字符串
    lambda x: ','.join(str(i) for i in x if pd.notna(i))
)

如果需要对同一分组内重复的邮编去重,可以调整为:

lambda x: ','.join(sorted(set(str(i) for i in x if pd.notna(i))))

方案2:预处理列类型,效率更高(适合39万行大数据量)

提前把邮编列的空值替换为空字符串,统一转为字符串类型后再分组拼接,执行速度比自定义lambda更快:

# 预处理:空值替换为空字符串,统一转为str类型
db['Kod pocztowy (PNA)'] = db['Kod pocztowy (PNA)'].fillna('').astype(str)
# 分组拼接
db_miasto = db.groupby(
    ['Województwo', 'Powiat', 'Gmina', 'Miejscowość (GUS)', 'Kod gminy', 'Kod miejscowości'], 
    as_index=False
)['Kod pocztowy (PNA)'].agg(','.join)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:57:04