【问题标题】:How to read a specific line number in a csv with pandas如何使用熊猫读取 csv 中的特定行号
【发布时间】:2018-05-15 03:48:59
【问题描述】:

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

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

这个函数只允许我读取第一行,但是我如何读取第二行,第三行等等? (我想用熊猫。)

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

【问题讨论】:

  • 我无法读取整个数据集,它是 20GB,我没有这个时间。@SandeepKadapa

标签: python pandas csv dataframe


【解决方案1】:

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

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 循环。

【讨论】:

    【解决方案2】:

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

    skiprows
    

    如果将列表分配给此参数,它将跳过列表索引的行:

    skiprows = [0,1]
    

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

      • 我已经更新了问题,明确指出我无法读取整个数据集。@Aymen
      【解决方案4】:

      我发现使用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 是一个非负数+ 在row = next(r) 行周围放置一个try/except StopIteration 块,这样您就可以捕捉到读者到达文件末尾。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-09
        • 2015-12-21
        • 2015-03-30
        • 2017-09-21
        • 2018-06-03
        • 1970-01-01
        • 1970-01-01
        • 2014-12-23
        相关资源
        最近更新 更多