【问题标题】:How to read a CSV file every other row如何每隔一行读取 CSV 文件
【发布时间】:2019-10-28 13:56:41
【问题描述】:

如何从 CSV 文件中获取每 2 行的数据?

例如,如果我有一个看起来像这样的文件

  0   1
0 23  34
1 45  45
2 78  16
3 110 78
4 48  14
5 76  23
6 55  33
7 12  13
8 18  76

如何迭代并提取每第二行以获得类似的内容并附加到新的数据帧中?

0 23  34
2 78  16
4 48  14
6 55  33
8 18  76

谢谢!

【问题讨论】:

    标签: python pandas numpy data-science


    【解决方案1】:

    使用read_csvskiprows参数:

    保持偶数行:

    pd.read_csv('file.csv', skiprows=lambda x: (x != 0) and not x % 2)
    

    保留奇数行:

    pd.read_csv('file.csv', skiprows=lambda x: x % 2)
    

    请注意,标头包含在skiprows 中,这就是为什么在偶数示例中需要x != 0

    例子:

    In [1]: import pandas as pd
       ...: from io import StringIO
       ...:
       ...: data = """A,B
       ...: a,1
       ...: b,2
       ...: c,3
       ...: d,4
       ...: e,5
       ...: """
    
    In [2]: pd.read_csv(StringIO(data))
    Out[2]:
       A  B
    0  a  1
    1  b  2
    2  c  3
    3  d  4
    4  e  5
    
    In [3]: pd.read_csv(StringIO(data), skiprows=lambda x: (x != 0) and not x % 2)
    Out[3]:
       A  B
    0  a  1
    1  c  3
    2  e  5
    
    In [4]: pd.read_csv(StringIO(data), skiprows=lambda x: x % 2)
    Out[4]:
       A  B
    0  b  2
    1  d  4
    

    【讨论】:

      【解决方案2】:

      您可以使用numpy 将它们全部读入内存并每隔一行存储一次:

      import numpy as np
      import pandas as pd
      
      data = np.loadtxt(filename)
      data = pd.DataFrame(data[::2])
      

      最后一位,[::2],意思是“每隔一个元素”。

      【讨论】:

        【解决方案3】:

        就个人而言,我认为最简单的答案(如果您只想要偶数行)是:

        import pandas as pd
        df = pd.read_csv('csv_file.csv')
        rows_we_want = [row for i,row in enumerate(df.index) if not i % 2]
        df_new = df.loc[rows_we_want]
        

        enumerate() 是 Python 中一个强大的函数,“if not i % 2”仅在行号 (i) 为偶数时为 True。如果您想要奇数行,则可以删除“不”。我认为这种方法比逐行读取文件更容易,尽管如果您的文件非常大,则可能存在可伸缩性问题。希望这会有所帮助

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-13
          • 2018-08-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多