如何使用pandas

时间:2017-12-01 04:23:34

标签: python pandas csv dataframe

我有一个庞大的数据集,我试图逐行阅读。 目前,我正在使用pandas读取数据集:

df = pd.read_csv("mydata.csv", sep =',', nrows = 1)

此功能允许我只读第一行,但如何读取第二行,第三行等等? (我想用熊猫。)

编辑: 为了更清楚,我需要一次读取一行,因为数据集是20 GB,我无法将所有内容保存在内存中。

4 个答案:

答案 0 :(得分:3)

查看pandas文档,read_csv函数有一个参数:

skiprows

如果为此参数分配了一个列表,它将跳过列表索引的行:

skiprows = [0,1]

这将跳过第一行和第二行。 因此,nrowskiprows的组合允许分别读取数据集中的每一行。

答案 1 :(得分:0)

您正在使用nrows = 1,这意味着“要读取的文件行数。有用于读取大型文件”

所以你告诉它只读第一行并停止。

您应该删除参数以将所有csv文件读入DataFrame,然后逐行进行。

有关使用情况的详细信息,请参阅文档:https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

答案 2 :(得分:0)

一种方法是逐部分读取文件并存储每个部分,例如:

df1 = pd.read_csv("mydata.csv", nrows=10000)

在这里,您将跳过已经读取并存储在df1中的前10000行,而将接下来的10000行存储在df2中。

df2 = pd.read_csv("mydata.csv", skiprows=10000 nrows=10000)
dfn = pd.read_csv("mydata.csv", skiprows=(n-1)*10000, nrows=10000)

也许有一种方法可以将这个想法引入for或while循环中。

答案 3 :(得分:0)

我发现使用skiprows的速度非常慢。这种方法对我来说效果很好:

line_number = 8 # the row you want. 0-indexed

import pandas as pd
import sys # or `import itertools`
import csv

# you can wrap this block in a function:
# (filename, line_number[, max_rows]) -> row
with open(filename, 'r') as f:
    r = csv.reader(f)
    for i in range(sys.maxsize**10): # or `i in itertools.count(start=0)`
        if i != line_number:
            next(r) # skip this row
        else:
            row = next(r)
            row = pd.DataFrame(row) # or transform it however you like
            break # or return row, if this is a function

# now you can use `row` !

要使其更可靠,请用您的实际总行数替换sys.maxsize**10和/或确保line_number是非负数,并在其周围加上try/except StopIteration row = next(r)行,这样您就可以抓住读者到达文件末尾的位置。