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

Pandas处理CSV单元格去重时报'float' object is not iterable错误如何解决

问题原因

你遇到的TypeError: 'float' object is not iterable报错,本质是pub_emp_year列存在空值:pandas读取CSV文件时,默认会把单元格空值解析为float类型的NaN。你对NaN执行str.split()操作后返回的还是NaN,后续调用map(set)时尝试将float类型的NaN转为集合,就触发了迭代错误。

你可以先执行以下代码确认空值数量:

print(df['pub_emp_year'].isna().sum())
解决方案

推荐使用带空值兼容逻辑的自定义函数处理,同时还可以选择是否保留单元格内词汇的原有顺序:

方案1:保留空值+保留词汇首次出现顺序(推荐)

import pandas as pd

filepath = "C:/data/Untitled Folder/creditdata.csv"
df = pd.read_csv(filepath, encoding='utf-8')

def cell_dedup(s):
    # 跳过非字符串类型的空值/异常值
    if not isinstance(s, str):
        return s
    # 分割后用dict.fromkeys去重,Python3.7+默认保留插入顺序
    unique_words = list(dict.fromkeys(s.split(", ")))
    return ", ".join(unique_words)

# 处理单列
for col in ["pub_emp_year"]:
    df[col] = df[col].apply(cell_dedup)

# 如需处理多列直接在列表里加列名即可,例如:
# for col in ["pub_emp_year", "col_a", "col_b"]:
#     df[col] = df[col].apply(cell_dedup)

df.to_csv('creditdata2.csv', mode='a', index=False)

方案2:空值转空字符串处理

如果你不需要保留原空值标识,可以先把空值填充为空字符串再处理:

for col in ["pub_emp_year"]:
    df[col] = df[col].fillna("")\
              .str.split(", ")\
              .map(lambda x: ", ".join(dict.fromkeys(x)))\
              # 可选:处理完再把空字符串转回NaN
              .replace("", pd.NA)
注意事项
  • 不要直接使用set去重,set会打乱词汇的原有顺序,对顺序有要求的场景务必用dict.fromkeys实现去重。
  • 追加写入CSV时注意表头重复问题,如果是首次写入不要加mode='a'参数,避免表头多次写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:06:03