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

202

我有一个非常大的数据集,无法全部读入内存。因此,我想只读入其中的一部分进行训练,但不知道如何实现。

3个回答

340

如果你只想阅读前999,999行(不包括标题行):

read_csv(..., nrows=999999)

如果您只想阅读1,000,000到1,999,999行

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

nrows:整数,默认为None。读取文件的行数。对于读取大文件的一部分很有用*

skiprows:类似列表或整数的行号,要跳过(从0开始索引),或要在文件开头跳过的行数(int)

对于大文件,您可能还想使用chunksize:

chunksize:整数,默认为None。返回TextFileReader对象以进行迭代。

pandas.io.parsers.read_csv文档


3
请注意,如果您的文件在第0行有列名,则skiprows参数需要传入一个列表或范围。例如:read_csv('路径', ..., skiprows=[1, 1000000], nrows=999999) 或者 read_csv('路径', ..., skiprows=range(1, 1000000), nrows=999999) - steTATO

0

chunksize=是一个非常有用的参数,因为在传递给read_csv后,它的输出是一个迭代器,所以您可以调用next()函数来获取特定的块,而不会过度消耗内存。例如,要获取前n行,您可以使用:

chunks = pd.read_csv('file.csv', chunksize=n)
df = next(chunks)

例如,如果您有一个时间序列数据,并且想要将前700k行作为训练集,其余部分作为测试集,那么可以通过以下方式实现:
chunks = pd.read_csv('file.csv', chunksize=700_000)
train_df = next(chunks)
test_df = next(chunks)

-1
如果您不想使用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=',')
        count=0
        for row in csv_reader:
            if count:
                break;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接