首页 > 解决方案 > Pandas:CSV 标题和数据行大小不匹配

问题描述

是否可以指示 Pandas 忽略位置超出标题大小的列?

import pandas

with open('test.csv', mode='w') as csv_file:
    csv_file.write("datetime,A\n")
    csv_file.write("2018-10-09 18:00:07, 123\n")

df = pandas.read_csv('test.csv')
print(df)

给出答案:

              datetime    A
0  2018-10-09 18:00:07  123

但是加载具有更多数据列的 CSV 文件,这些数据列在标题中定义:

with open('test.csv', mode='w') as csv_file:
    csv_file.write("datetime,A\n")
    csv_file.write("2018-10-09 18:00:07, 123, ABC, XYZ\n")

df = pandas.read_csv('test.csv')
print(df)

返回:

                        datetime     A
2018-10-09 18:00:07 123      ABC   XYZ

Pandas 将标题移动到数据的最右侧位置。

我需要不同的行为。我希望熊猫忽略数据行,这超出了标题。

注意:我无法枚举列,因为它是一个通用用例。由于某些独立于我的代码的原因,有时会有更多数据,这是预期的。我想忽略额外的数据。

标签: pythonpandascsv

解决方案


Pandas 似乎意识到与实际标题相比有太多列,并且它假设前两个(数据)列是(多)索引。

usecols使用in 参数指定要读取的数据列read_csv

import pandas

with open('test.csv', mode='w') as csv_file:
    csv_file.write("datetime,A\n")
    csv_file.write("2018-10-09 18:00:07, 123, ABC, XYZ\n")

df = pandas.read_csv('test.csv', usecols=[0,1]) 
print(df)

产量

              datetime    A
0  2018-10-09 18:00:07  123

推荐阅读