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

210 投票
3 回答
294711 浏览
提问于 2025-04-18 07:31

我有一个非常大的数据集,但我不能一次性把整个数据集都读进来。所以,我在考虑只读取其中的一部分来进行训练,但我不知道该怎么做。

3 个回答

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=',')
        count=0
        for row in csv_reader:
            if count:
                break;
3

chunksize= 是一个非常实用的参数,因为在使用 read_csv 读取数据时,它会返回一个迭代器。简单来说,你可以用 next() 函数来获取你想要的特定数据块,这样就不会占用太多内存。例如,如果你想获取前 n 行数据,可以这样做:

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

举个例子,如果你有一份时间序列数据,想把前70万行作为训练集,剩下的作为测试集,你可以这样操作:

chunks = pd.read_csv('file.csv', chunksize=700_000)
train_df = next(chunks)
test_df = next(chunks)
348

如果你只想读取前999,999行(不包括表头):

read_csv(..., nrows=999999)

如果你只想读取第1,000,000行到第1,999,999行:

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

nrows : 整数,默认值为None 读取文件的行数。这个参数在处理大文件时特别有用,可以让你只读取一部分内容。

skiprows : 列表或整数 跳过的行号(从0开始计数)或者在文件开头要跳过的行数(整数)。

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

chunksize : 整数,默认值为None 返回一个TextFileReader对象,方便你逐块读取数据。

pandas.io.parsers.read_csv 文档

撰写回答