pd.read_csv读取tips.csv后dtypes仅返回int64,如何获取各列正确数据类型
问题原因
- CSV读取分隔符配置错误:
pd.read_csv默认使用逗号作为分隔符,若上传的文件实际分隔符不匹配、或文件内容格式被篡改,所有列会被合并为单列,自然仅返回一个数据类型。 df变量被意外覆盖:读取数据后运行的其他代码可能将df重新赋值为Series、单个数值等非DataFrame对象,此时调用.dtypes只会返回单个类型结果。- 文件头部存在异常内容:CSV开头存在多余空行、注释行,或表头缺失时,
pd.read_csv会将第一行数据识别为表头,导致内容解析错位,最终得到单列表格。 - 上传文件内容损坏:文件上传过程中出现丢包、截断,仅部分整数内容被正常读取,最终生成单列整数类型的DataFrame。
解决方法
按优先级逐一排查:
- 确认
df实际结构:
执行以下代码查看结构:
若输出行列数为print(df.shape) print(type(df)) print(df.head())(N, 1)说明是文件解析问题;若type(df)结果不是pandas.core.frame.DataFrame说明变量已被覆盖。 - 变量覆盖问题处理:
重新单独运行df = pd.read_csv('tips.csv')代码块,运行后立刻执行df.dtypes,期间不要运行其他修改df的代码,确认是否返回正常的多列类型结果。 - 单列表解析问题处理:
调整读取参数,适配文件格式:# 明确指定分隔符、表头行位置 df = pd.read_csv('tips.csv', sep=',', header=0) # 分隔符不明确时尝试自动适配 df = pd.read_csv('tips.csv', sep=r'\s+|,', engine='python') - 文件完整性校验:
重新上传原始CSV文件,上传后先校验文本格式:
正常表头应为with open('tips.csv', 'r') as f: # 打印第一行确认表头是否正常 print(f.readline())total_bill,tip,sex,smoker,day,time,size,若输出异常说明文件内容损坏。
内容的提问来源于stack exchange,提问作者rretto
相关产品推荐
相关产品推荐

