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

Python使用iterrows()处理DataFrame时split/str.split报错如何解决?

问题原因

  • 你遇到的矛盾报错本质是Name列存在混合类型:部分行是正常的逗号分隔姓名字符串,部分行是空值NaN(NaN在pandas中属于float类型)。遍历到空值行时调用split()就会报*'float' object has no attribute 'split';遍历到字符串行时,因为row['Name']是单个字符串值,而.str是pandas Series(序列)专属的访问器,单个字符串没有这个属性,就会报'str' object has no attribute 'str'*。
  • 第二个隐含问题:iterrows()返回的行是原数据的副本,直接修改row["Number of Names"]不会同步到原DataFrame,就算不报错也无法成功生成新列。
  • 第三个注意点:遍历行需要调用.iterrows()方法,直接写for index, row in search_df:是遍历DataFrame的列名,而非行数据。

最优解决方案(推荐)

不要用迭代遍历,直接用pandas向量化操作,性能更高代码更简洁,自动处理空值:

import pandas as pd
# 直接生成新列,空值对应的姓名数默认设为0,可根据需求调整fillna的参数
search_df['Number of Names'] = search_df['Name'].str.split(',').str.len().fillna(0).astype(int)

如果你一定要用iterrows实现

修改写法如下,先判断空值再计算,直接给原DataFrame对应位置赋值:

import pandas as pd

for index, row in search_df.iterrows():
    name_val = row['Name']
    if pd.isna(name_val):
        # 空值的姓名计数可自定义,这里设为0
        name_count = 0
    else:
        name_count = len(name_val.split(','))
    search_df.loc[index, 'Number of Names'] = name_count

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:57:02