【问题标题】:Having trouble removing headers when using pd.read_csv使用 pd.read_csv 时无法删除标题
【发布时间】:2016-01-24 02:15:51
【问题描述】:

我有一个 .csv,其中包含列标题并显示在下方。当我将文件作为数据框摄取时,我需要抑制列标签。

date,color,id,zip,weight,height,locale
11/25/2013,Blue,122468,1417464,3546600,254,7

当我发出以下命令时:

 df = pd.read_csv('c:/temp1/test_csv.csv', usecols=[4,5], names = ["zip","weight"], header = 0, nrows=10)

我明白了:

zip               weight
0   1417464       3546600

我尝试了对 header=True 和 header=0 的各种操作。如果我不使用 header=0,那么列将全部打印在行的顶部,如下所示:

    zip           weight
    height        locale
0   1417464       3546600

我尝试过 skiprows= 0 和 1 但都没有删除标题。但是,该命令通过跳过指定的行来工作。

我真的可以使用一些额外的见解或解决方案。提前感谢您提供的任何帮助。

提比略

【问题讨论】:

    标签: python python-2.7 pandas


    【解决方案1】:

    使用@jezrael的例子,如果你想跳过标题并抑制de列标签:

    import pandas as pd
    import numpy as np
    import io
    
    temp=u"""date,color,id,zip,weight,height,locale
    11/25/2013,Blue,122468,1417464,3546600,254,7"""
    #after testing replace io.StringIO(temp) to filename
    df = pd.read_csv(io.StringIO(temp), usecols=[4,5], header=None, skiprows=1)
    print df
             4    5
    0  3546600  254
    

    【讨论】:

      【解决方案2】:

      我不确定我是否完全理解您为什么要删除标题,但只要您没有任何其他以 'd' 开头的行,您可以如下注释掉标题行:

      >>> df = pd.read_csv('test.csv', usecols=[3,4], header=None, comment='d')  # comments out lines beginning with 'date,color' . . .
      >>> df
               3        4
      0  1417464  3546600
      

      最好用交叉线字符 (#) 注释掉 csv 文件中的行,然后使用相同的方法(同样,只要您没有用交叉线注释掉任何其他行):

      >>> df = pd.read_csv('test.csv', usecols=[3,4], header=None, comment='#')   # comments out lines with #
      >>> df
               3        4
      0  1417464  3546600
      

      【讨论】:

        【解决方案3】:

        我认为你是对的。

        因此您可以将列名更改为ab

        import pandas as pd
        import numpy as np
        import io
        
        temp=u"""date,color,id,zip,weight,height,locale
        11/25/2013,Blue,122468,1417464,3546600,254,7"""
        #after testing replace io.StringIO(temp) to filename
        df = pd.read_csv(io.StringIO(temp), usecols=[4,5], names = ["a","b"], header = 0 , nrows=10)
        print df
                 a    b
        0  3546600  254
        

        现在这些列有了新名称,而不是 weightheight

        df = pd.read_csv(io.StringIO(temp), usecols=[4,5], header = 0 , nrows=10)
        print df
            weight  height
        0  3546600     254
        

        您可以查看文档read_csv(我加粗):

        header:整数,整数列表,默认“推断”

        用作列名的行号,以及数据的开头。如果没有传递名称,则默认为 0,否则为 None。 显式传递 header=0 以便能够替换现有名称。 标题可以是指定列上多索引的行位置的整数列表,例如[0,1,3]。未指定的中间行将被跳过(例如,此示例中的 2 被跳过)。请注意,如果skip_blank_lines=True,此参数会忽略注释行和空行,因此header=0 表示数据的第一行而不是文件的第一行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-05-28
          • 2016-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-01
          • 1970-01-01
          • 2015-10-31
          相关资源
          最近更新 更多