使用DataFrame输出xlsx单列显示NaN及浮点转整数问题咨询
代码/问题展示见对应上传截图
问题1:xlsx数据集读入后数值列全显示NaN的成因与解决方法(Google Colab环境)
常见成因
- 文件路径或sheet读取错误:Colab临时文件系统中未正确上传目标xlsx文件,或读取时未指定数据所在sheet,pandas默认读取第一个空白sheet时不会直接抛出报错,会返回空值/NaN。
- 表头行错位:自制xlsx常存在前置空行、合并单元格,pandas默认将首行识别为表头,若实际数据/表头不在首行,会导致列匹配错位,数值列被识别为空。
- 列名不匹配:列名存在不可见的首尾空格、换行符时,直接按可见列名调用列会匹配失败,返回全NaN。
- 单元格格式异常:xlsx中数值列混入中文单位、特殊符号,或存储为WPS/Excel特殊加密格式,会导致pandas解析数值失败返回NaN。
对应解决步骤
- 先确认文件已正确上传到Colab内容目录,执行命令校验文件存在:
!ls /content/ - 若读取时提示缺少解析引擎,先安装依赖:
!pip install openpyxl - 读入文件时显式指定sheet、表头位置、解析引擎,示例代码:
import pandas as pd df = pd.read_excel( "/content/替换为你的xlsx文件名.xlsx", sheet_name="替换为数据所在的sheet名称", header=1, # 表头所在行的索引,从0开始计数,比如表头在第2行就填1,按实际情况调整 engine="openpyxl" ) # 校验读入结果,打印前5行和所有列名 print(df.head()) print(df.columns.tolist())
- 统一清理列名的首尾不可见字符,避免列名匹配失败:
df.columns = df.columns.str.strip() - 若数值列仍存在NaN,检查列中是否混入非数值内容,强制转换数值类型:
df['替换为你的数值列名'] = pd.to_numeric(df['替换为你的数值列名'], errors='coerce')
问题2:DataFrame指定列浮点型转整数型方法
根据列中是否存在空值选择对应方法:
- 列中无NaN/空值:直接使用
astype转换为普通整数类型df['替换为目标列名'] = df['替换为目标列名'].astype(int) - 列中存在NaN需要保留空值:使用pandas可空整数类型
Int64(首字母大写,区别于numpy的int64)df['替换为目标列名'] = df['替换为目标列名'].astype('Int64') - 需要先填充NaN再转整数:比如将空值填充为0后转换
df['替换为目标列名'] = df['替换为目标列名'].fillna(0).astype(int)
备注:运行环境为Google Colaboratory
内容的提问来源于stack exchange,提问作者Mariangel Ibarra
相关产品推荐
相关产品推荐

