Python加载CSV文件未获取正确列标题问题咨询
解决pandas读取CSV后列标题显示为0.1、0.2而非实际字段名的问题
原因分析
我之前也碰到过几乎一模一样的问题,核心根源大概率是**skiprows=2的参数设置跳过了真正的列名行**,具体拆解下:
- 默认情况下,pandas会把跳过指定行之后读取到的第一行当作列标题。如果你设置
skiprows=2,意味着直接跳过CSV的前两行——要是你的实际列名("Plot"、"Title"这类)就在前两行里,pandas找不到有效的列名,就会自动生成0.1、0.2这类默认列名。 - 另外也可能是CSV本身的格式坑:比如前两行有多余的注释、空行,或者列名行的分隔符和数据行不一致(虽然你指定了
sep=',',但列名行可能用了其他分隔符),导致pandas识别不出这一行是列标题。
解决方法
根据CSV的实际结构,你可以试试这几个方案:
方案1:精准调整skiprows参数,保留列名行
如果你的列名在CSV的第一行,第二行是无关的注释/空行,那应该只跳过第二行,而不是前两行:
import pandas as pd df_csv = pd.read_csv("IMDB_data.csv", sep=',', encoding="ISO-8859-1", skiprows=[1]) # 跳过索引为1的行(也就是第二行)
如果你的列名确实在第三行,那skiprows=2是对的,但需要明确指定header参数告诉pandas哪一行是列名:
df_csv = pd.read_csv("IMDB_data.csv", sep=',', encoding="ISO-8859-1", skiprows=2, header=0)
方案2:手动指定列名
如果CSV里的列名行完全无法被识别,你可以直接手动定义列名列表:
custom_columns = ["Title", "Plot", "Rating", ...] # 替换成你实际的列名 df_csv = pd.read_csv("IMDB_data.csv", sep=',', encoding="ISO-8859-1", skiprows=2, names=custom_columns)
方案3:检查并修复CSV格式
直接用文本编辑器(比如Notepad++)打开IMDB_data.csv,确认这几点:
- 列名行的具体位置,前两行是否有多余的无效内容
- 列名行的分隔符是否和数据行一致(都是逗号)
- 列名行是否有乱码,如果有,尝试换成
encoding='utf-8'或encoding='cp1252'试试
排查诱因的步骤
为了避免以后再踩类似的坑,你可以按这个流程排查:
- 第一步:用文本编辑器打开CSV,直观查看前几行的结构,确认列名的位置和格式
- 第二步:先去掉
skiprows参数,读取CSV看看原始输出,确认哪一行是列名、哪些行是需要跳过的 - 第三步:测试不同的
skiprows和header组合,验证是否能正确识别列名 - 第四步:检查编码是否匹配,若CSV有特殊字符,多试几种常见编码格式
内容的提问来源于stack exchange,提问作者Shaivi sharma
相关产品推荐
相关产品推荐

