【问题标题】:Using pandas to read a text file with the headers in multiple rows使用 pandas 读取包含多行标题的文本文件
【发布时间】:2017-09-26 21:53:27
【问题描述】:

我有以下文件:

        OBJ             OBJ     OBJ                                                                                           
       DATE        OBJ  CLASS  DATE        OBJ                                       OBJ                         OBJ          
CLASS  ENTERED1    TAG  REPL   ENTERED2    NAME                                      TSTMP                       USERID       
-----  ----------  ---  -----  ----------  ----------------------------------------  --------------------------  --------     
EZ4    2002-02-06  D           2002-02-06  abc random                                2002-02-06-10.05.30.242768  2342342      
000    2001-09-27  D           2001-09-27  none                                      2001-09-27-10.23.31.121606  2343242      
011    1974-07-09              0001-01-01  board COMPENSATON                         1997-01-22-09.10.23.145853  

列用下划线定义,标题文本被分成多行。我想将其读入熊猫数据框中,以使列文本保持完整并删除下划线。我该怎么做才能以我正在寻找的格式获取数据框?

【问题讨论】:

    标签: python file pandas dataframe


    【解决方案1】:

    我将pd.read_fwf 用于固定宽度,但指定'\s{2,}' 的分隔符

    g = lambda x: '' if x.startswith('Unnamed') else x
    
    pd.read_fwf(
        'file.txt',
        sep='\s{2,}',
        header=[0, 1, 2],
        skiprows=[3]
    ).rename(columns=g)
    
                    OBJ        OBJ                                                                      
                   DATE  OBJ CLASS        DATE                OBJ                                       
      CLASS    ENTERED1  TAG  REPL    ENTERED2               NAME                       TSTMP     USERID
    0   EZ4  2002-02-06    D   NaN  2002-02-06         abc random  2002-02-06-10.05.30.242768  2342342.0
    1   000  2001-09-27    D   NaN  2001-09-27               none  2001-09-27-10.23.31.121606  2343242.0
    2   011  1974-07-09  NaN   NaN  0001-01-01  board COMPENSATON  1997-01-22-09.10.23.145853        NaN
    

    【讨论】:

      【解决方案2】:

      看起来前两行和第三行是不必要的,所以通过指定skiprows 属性来跳过它们。

      df = pd.read_csv('file.txt', skiprows=(0, 1, 3), sep='\s{2,}', engine='python')
      

      【讨论】:

        【解决方案3】:

        在到达下划线之前存储文本信息。当您到达下划线时,保存每个“列”的开始和结束位置,然后返回并酌情连接该文本。考虑将编写作为一个可重用的函数......你将需要有一天再次做这样的事情:-)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-03-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-26
          • 1970-01-01
          相关资源
          最近更新 更多