Python Pandas:如何只读取CSV文件的前n行?

164 人关注

我有一个非常大的数据集,我没有能力把整个数据集都读进去。所以,我想只读其中的一大块来训练,但我不知道怎么做。任何想法都会得到赞赏。

python
pandas
csv
file-io
bensw
bensw
发布于 2014-05-25
2 个回答
smci
smci
发布于 2022-07-21
已采纳
0 人赞同

如果你只想读取前999,999(非标题)行。

read_csv(..., nrows=999999)

如果你只想读1,000,000行......。1,999,999

read_csv(..., skiprows=1000000, nrows=999999)

nrows: int, default None 要读取的文件的行数。适用于 读取大文件的片段*。

skiprows: 列表式或整数式 要跳过的行数(0-索引)或文件开始时要跳过的行数(int)。

而对于大文件,你可能还想使用块状大小。

块状大小: int, 默认无 返回TextFileReader对象用于迭代

pandas.io.parsers.read_csv 文档

smci
这没关系,它们是稍微隐藏的。文档可以用这些例子来做。替换代码0】有点麻烦,你必须处理大小不均的块。另外,预先分配你的数组/数据帧的固定大小,你知道你需要的,只要你能避免,就不要动态地做concat/append。
smci
......还有,它不像界面是 nstart=,nend=... 。你必须在 skiprows = nend - nrows 上做算术。
我想这是刚刚从SQL中接管的。 LIMIT nstart, skiprows :/
smci
...如果你也使用 header=n/list ,不要忘记偏离-n的错误
Luiz A C K
Luiz A C K
发布于 2022-07-21
0 人赞同

如果你不想使用Pandas,你可以使用csv库,并通过交互中断来限制读取的行。

例如,我需要读取一个存储在 csvs 列表,以获得唯一的标题。

for csvs in result:
    csvs = './'+csvs
    with open(csvs,encoding='ANSI', newline='') as csv_file:
        csv_reader = csv.reader(csv_file, delimiter=',')