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

使用split处理pandas列时遇到NaN浮点数报错如何处理或忽略

问题根源
  • pandas读取csv时,你指定的na_values对应内容会被转换为np.NaN,属于float浮点类型,没有字符串的split方法,直接调用会触发类型错误
  • 现有代码的空值判断逻辑完全错误:str(y=="nan")是先执行y == "nan"得到布尔值,再把布尔值转为字符串,非空字符串在if判断中始终为真,会误跳过所有行
修复方案

方案1:修改循环内的空值判断逻辑

用pandas内置的pd.isna()方法判断空值,兼容np.NaN、None等多种空类型,修改后代码如下:

import pandas as pd
import csv

missing_values = ["#N/A","None","nan"]
df_eval = pd.read_csv('e.csv',na_values = missing_values)

with open('e1.csv', 'a', newline='',errors='ignore', encoding="utf8" ) as f:
        writer = csv.writer(f)
        for j in range(len(df_eval)):
           x=df_eval.iloc[j,1]
           y=df_eval.iloc[j,2]
           # 正确判断空值,空行直接跳过
           if pd.isna(y):
               continue
           # 此处再调用split不会报错
           y_split_res = y.split(",")
           print("y", y)

方案2:提前过滤空值行(效率更高,适合数据量较大的场景)

提前将y列为空的行从数据框中删除,后续循环无需再做空值判断:

import pandas as pd
import csv

missing_values = ["#N/A","None","nan"]
df_eval = pd.read_csv('e.csv',na_values = missing_values)
# 提前过滤y列(第三列,索引为2)非空的行,重置索引
df_eval = df_eval[df_eval.iloc[:,2].notna()].reset_index(drop=True)

with open('e1.csv', 'a', newline='',errors='ignore', encoding="utf8" ) as f:
        writer = csv.writer(f)
        for j in range(len(df_eval)):
           x=df_eval.iloc[j,1]
           y=df_eval.iloc[j,2]
           # 无需再判断空值,直接调用split即可
           y_split_res = y.split(",")
           print("y", y)
注意事项

不要用y == np.nan的方式判断空值,NaN和任何值做等值判断都会返回False,必须用pd.isna(y)或者np.isnan(y)做空值校验。
如果不需要跳过空值行,可以给空值填充默认空字符串再执行split:y = y if pd.notna(y) else ""。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:24:05