Python Panda组合标题行



我有这个数据帧:

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的(,结果是这样的:

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:组合多索引DataFrame的头行,但我不知道如何处理我的数据。我有点不懂Python。

如果存在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

如果NaN是字符串:

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  

最新更新