使用参数header=[0,1],但接下来需要进行下一步处理——将Unnamed列替换为NaN,然后通过前向填充:
import pandas as pd
temp=u''',Header1,,Header2,
Date,Subheader1-1,Subheader1-2,Subheader2-1,Subheader2-2
2018-01-02,10,2,5,6'''
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), header=[0,1])
print (df)
Unnamed: 0_level_0 Header1 Unnamed: 2_level_0 Header2 \
Date Subheader1-1 Subheader1-2 Subheader2-1
0 2018-01-02 10 2 5
Unnamed: 4_level_0
Subheader2-2
0 6
a = df.columns.get_level_values(0).to_series()
b = a.mask(a.str.startswith('Unnamed')).ffill().fillna('')
df.columns = [b, df.columns.get_level_values(1)]
print (df)
Header1 Header2
Date Subheader1-1 Subheader1-2 Subheader2-1 Subheader2-2
0 2018-01-02 10 2 5 6
另一个更好的解决方案是按第一列创建索引:
import pandas as pd
temp=u''',Header1,,Header2,
Date,Subheader1-1,Subheader1-2,Subheader2-1,Subheader2-2
2018-01-02,10,2,5,6'''
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), header=[0,1], index_col=[0])
print (df)
Header1 Unnamed: 2_level_0 Header2 Unnamed: 4_level_0
Date Subheader1-1 Subheader1-2 Subheader2-1 Subheader2-2
2018-01-02 10 2 5 6
a = df.columns.get_level_values(0).to_series()
b = a.mask(a.str.startswith('Unnamed')).ffill().fillna('')
df.columns = [b, df.columns.get_level_values(1)]
print (df)
Header1 Header2
Date Subheader1-1 Subheader1-2 Subheader2-1 Subheader2-2
2018-01-02 10 2 5 6