【问题标题】:Python Panda combine header rowPython Panda 组合标题行
【发布时间】:2022-02-21 22:33:09
【问题描述】:

我有这个数据框:

     Artikel                 description  nunber  % av     Price    Price2 
0  nummer                         NaN      NaN        NaN   100 st   100 st   
1      20       aaaaaaaaaaaaaaaaaaaaa    28.0      0,03 %    21,25    12,     
2      21       bbbbbbbbbbbbbbbbbbbbb    928.0     0,86 %    83,57    0,5    
3      22       ccccccccccccccccccccc    44569.0   41,27 %   92,12    0,5  

我想合并前两行(并删除 Nan's),最终结果如下:

     Artikel nummer description      nunber        % av     Price 100 st    Price2 100 st 
                                               
0      20       aaaaaaaaaaaaaaaaaaaaa    28.0      0,03 %    21,25          12,     
1      21       bbbbbbbbbbbbbbbbbbbbb    928.0     0,86 %    83,57          0,5    
2      22       ccccccccccccccccccccc    44569.0   41,27 %   92,12          0,5  

我尝试了这个解决方案:Pandas: combining header rows of a multiIndex DataFrame,但我不知道这将如何处理我的数据。我对 Python 有点陌生。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    如果有MultiIndex:

    #parameter header for convert first 2 rows to MultiIndex
    df = pd.read_csv(file, header=[0,1])
    
    
    print (df.columns)
    MultiIndex([(    'Artikel',      '0'),
                ('description', 'nummer'),
                (     'nunber',      nan),
                (       '% av',      nan),
                (      'Price',      nan),
                (     'Price2', '100 st')],
               )
    
    df.columns = [f'{a} {b}' if pd.notna(b) else a for a, b in df.columns]
    print (df)
       Artikel 0     description nummer   nunber     % av  Price Price2 100 st
    1         20  aaaaaaaaaaaaaaaaaaaaa     28.0   0,03 %  21,25           12,
    2         21  bbbbbbbbbbbbbbbbbbbbb    928.0   0,86 %  83,57           0,5
    3         22  ccccccccccccccccccccc  44569.0  41,27 %  92,12           0,5
    

    如果NaNs 是字符串:

    print (df.columns)
    MultiIndex([(    'Artikel',      '0'),
                ('description', 'nummer'),
                (     'nunber',    'NaN'),
                (       '% av',    'NaN'),
                (      'Price',    'NaN'),
                (     'Price2', '100 st')],
               )
    
    df.columns = [f'{a} {b}' if b != 'NaN' else a for a, b in df.columns]
    print (df)
       Artikel 0     description nummer   nunber     % av  Price Price2 100 st
    1         20  aaaaaaaaaaaaaaaaaaaaa     28.0   0,03 %  21,25           12,
    2         21  bbbbbbbbbbbbbbbbbbbbb    928.0   0,86 %  83,57           0,5
    3         22  ccccccccccccccccccccc  44569.0  41,27 %  92,12           0,5
    

    如果不是MultiIndex 并且第一行必须加入列名:

    df.columns = [f'{a} {b}' if pd.notna(b) else a for a, b in zip(df.columns, df.iloc[0])]
    df = df.iloc[1:].reset_index(drop=True)
    print (df)
      Artikel nummer            description   nunber     % av Price 100 st  \
    0             20  aaaaaaaaaaaaaaaaaaaaa     28.0   0,03 %        21,25   
    1             21  bbbbbbbbbbbbbbbbbbbbb    928.0   0,86 %        83,57   
    2             22  ccccccccccccccccccccc  44569.0  41,27 %        92,12   
    
      Price2 100 st  
    0           12,  
    1           0,5  
    2           0,5  
    

    【讨论】:

    • 谢谢,我没有 MutiIndex。您的解决方案完美!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2022-12-04
    • 1970-01-01
    • 2017-09-08
    • 2022-12-05
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多