Pandas使用.join()时报TypeError: sequence item 0: expected str instance, float found
报错修复方案
报错根因
TypeError: sequence item 0: expected str instance, float found是studio_dev_emp_year列存在NaN值导致:pandas读取CSV时,空单元格会默认转换为float类型的NaN,列表中存在该类型值时,join方法要求所有元素都是字符串类型,因此触发类型报错。你之前的修复逻辑没有生效,是因为没有提前对列做统一类型转换,同时循环内的赋值逻辑存在错误,额外新增了多余的无效列。
核心修改点
- 读取CSV后统一将员工姓名列转为字符串类型,空值替换为空字符串
- 构造员工分组字典时过滤空值,避免无效值进入待拼接列表
- 修正循环内的错误赋值逻辑,避免新增多余列
- 拼接前额外过滤非空字符串,做双重兼容
修复后完整代码
import pandas as pd from copy import deepcopy filepath = "C:/Users/Untitled Folder/studio_level_dev.csv" df = pd.read_csv(filepath, encoding='utf-8') # 统一员工姓名列为字符串类型,空值替换为空串 df["studio_dev_emp_year"] = df["studio_dev_emp_year"].fillna("").astype(str) studio_dev_emp_year = { (year, dev_parent): list( df.loc[ (df["year"] == year) & (df["dev_parent"] == dev_parent), "studio_dev_emp_year" ].dropna().values # 过滤空值 ) for year in df["year"].unique() for dev_parent in df["dev_parent"].unique() } studio_dev_emp_year = {key: value for key, value in studio_dev_emp_year.items() if value} for i, row in df.iterrows(): other_employees = deepcopy(studio_dev_emp_year)[(row["year"], row["dev_parent"])] current_emp = row["studio_dev_emp_year"] # 提前判断待移除值是否存在,避免空姓名场景下的报错 if current_emp in other_employees: other_employees.remove(current_emp) # 仅拼接非空字符串值 df.loc[i, "other_studio_emp"] = ",".join([emp for emp in other_employees if emp.strip()]) df.to_csv('studio_level.csv', mode='a', index=False, encoding="utf-8")
内容的提问来源于stack exchange,提问作者reresearchgames
相关产品推荐
相关产品推荐

