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

处理Python中含NaN行拆分时的'float'对象无split属性错误

解决DataFrame拆分含NaN字符串列时的AttributeError问题

问题根源

你的代码存在两个关键问题:

  1. 循环遍历每行时,错误地固定取第一行的Place值(df['Place'].iloc[0]),而非当前行的row['Place']
  2. 第三行的Place值为NaN(pandas中空值默认以float类型的NaN存储),而float对象没有split()方法,因此触发报错

解决方案

方法1:循环内判断NaN并处理

直接在循环中对当前值做空值判断,针对性处理:

import pandas as pd
import numpy as np

# 构造示例DataFrame
df = pd.DataFrame({
    'Id': ['Id1', 'Id2', 'Id3'],
    'Place': ['New York,London,Russia', 'Argentina', np.nan]
})

L1 = []
for index, row in df.iterrows():
    place_val = row['Place']
    if pd.isna(place_val):
        L1.append([])
    else:
        L1.append(place_val.split(","))

方法2:先替换NaN为空字符串再统一拆分

先将所有NaN替换为空字符串,空字符串调用split()会返回空列表,无需额外判断:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Id': ['Id1', 'Id2', 'Id3'],
    'Place': ['New York,London,Russia', 'Argentina', np.nan]
})

df['Place'] = df['Place'].fillna('')
L1 = []
for index, row in df.iterrows():
    L1.append(row['Place'].split(","))

方法3:pandas矢量化操作(高效推荐)

无需手动循环,利用pandas内置的str.split()方法自动处理,再将结果转为列表:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Id': ['Id1', 'Id2', 'Id3'],
    'Place': ['New York,London,Russia', 'Argentina', np.nan]
})

L1 = df['Place'].str.split(",").fillna([]).tolist()

以上三种方法最终得到的L1结果均为:[['New York', 'London', 'Russia'], ['Argentina'], []]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 20:15:28