我有这个数据帧:
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