如何使用熊猫读取具有可变长度csv的no标头csv

时间:2020-09-02 20:27:37

标签: pandas

我有一个csv文件,它没有标题列,并且每行都有可变长度的记录。

每条记录最多可以包含398个字段,而我只想在数据框中保留256个字段。因为我只需要处理这些字段即可。

下面是该文件的精简版。

1,2,3,4,5,6
12,34,45,65
34,34,24

在上面,我想在调用read_csv时仅保留每行3个字段(类似于上面的256个字段)。

我尝试了以下

import pandas as pd
df = pd.read_csv('sample.csv',header=None)

当熊猫第一次使用元数据来生成元数据时,出现以下错误。

  File "pandas/_libs/parsers.pyx", line 2042, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 5 fields in line 4, saw 10

我能想到的唯一解决方案是使用

names = ['column1','column2','column3','column4','column5','column6']

在创建数据框时。

但是对于最大可能为50MB的真实文件,我不想这样做,因为这会占用大量内存,并且我试图使用aws lambda运行它,这会产生更多的成本。我每天必须处理大量文件。

我的问题是我可以在仅读取csv的同时使用更薄的256字段创建数据帧吗?那可以成为我的第一步吗?

我对大熊猫很陌生,所以请忍受我的无知。我试图寻找一种解决方案很长时间,但可以找到一个解决方案。

1 个答案:

答案 0 :(得分:1)

# only 3 columns
df = pd.read_csv('sample.csv', header=None, usecols=range(3))
print(df)
#     0   1   2
# 0   1   2   3
# 1  12  34  45
# 2  34  34  24

因此只需更改range的值即可。