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

Python处理CSV数据时遇AttributeError:'float'对象无split属性

问题解决:AttributeError: 'float' object has no attribute 'split'

问题原因

你的CSV数据中存在空的traffic字段(第1、3行),pandas读取空值时会自动将其转为float类型的NaN,而你定义的get_name等函数直接调用x.split(),NaN作为float对象没有split方法,因此触发报错。

解决方案

步骤1:统一字段类型,处理空值

读取CSV后,先把traffic字段的空值转换为空字符串,确保所有值都是字符串类型:

df["traffic"] = df["traffic"].fillna("")

步骤2:优化数据提取逻辑(推荐用字典解析替代正则)

你的traffic字段内容是类似Python字典的字符串,直接用ast.literal_eval转成字典后提取值,比正则更稳定,还能避免正则匹配失败的问题:

import ast

def extract_traffic_info(x):
    if not x:
        return {"name": "", "medium": "", "source": ""}
    try:
        traffic_dict = ast.literal_eval(x)
        return {
            "name": traffic_dict.get("name", "").replace("'", ""),
            "medium": traffic_dict.get("medium", "").replace("'", ""),
            "source": traffic_dict.get("source", "").replace("'", "")
        }
    except:
        return {"name": "", "medium": "", "source": ""}

# 应用函数并拆分列
traffic_info = df["traffic"].apply(extract_traffic_info).apply(pd.Series)
df[["traffic_name", "traffic_medium", "traffic_source"]] = traffic_info

完整修改后代码

import pandas as pd
import ast

df = pd.read_csv("test.csv")

# 处理空值,转为空字符串
df["traffic"] = df["traffic"].fillna("")

def extract_traffic_info(x):
    if not x:
        return {"name": "", "medium": "", "source": ""}
    try:
        traffic_dict = ast.literal_eval(x)
        return {
            "name": traffic_dict.get("name", "").replace("'", ""),
            "medium": traffic_dict.get("medium", "").replace("'", ""),
            "source": traffic_dict.get("source", "").replace("'", "")
        }
    except:
        return {"name": "", "medium": "", "source": ""}

# 提取并拆分字段
traffic_info = df["traffic"].apply(extract_traffic_info).apply(pd.Series)
df[["traffic_name", "traffic_medium", "traffic_source"]] = traffic_info

# 删除原字段并输出
del df["traffic"]
final_df = df.explode(["traffic_name", "traffic_medium", "traffic_source"], ignore_index=True)

print(final_df)
final_df.to_csv("traffic.csv", index=False)

额外说明

  • 用ast.literal_eval解析字典字符串比正则更可靠,能兼容字段格式的微小变化(比如空格、引号类型)
  • 增加try-except和空值判断,避免因数据格式异常导致代码崩溃
  • 最后explode时加上ignore_index=True,可以重置索引,避免空值行的索引混乱

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 23:10:25