我有这样的数据文件:
# comment
# comment
Header1;Header2
Unit1;Unit2
0;123
1;231
2;512
我想使用Pandas.read_csv使用行Header1;Header2
作为标题但是忽略Unit1;Unit2
来阅读它们。
到目前为止我所拥有的是
pd.read_csv(datafile, sep=';', comment='#', header=[0,1])
除了它从两个标题行创建一个多重标题外,几乎可以满足我的要求:
Header1 Header2
Unit1 Unit2
0 0 123
1 1 231
2 2 512
如何告诉Pandas只将第一行作为标题?
编辑: 这是我想要的输出:
Header1 Header2
0 0 123
1 1 231
2 2 512
答案 0 :(得分:4)
您可以将[3]
作为arg传递给skiprows
:
In [100]:
t="""# comment
# comment
Header1;Header2
Unit1;Unit2
0;123
1;231
2;512"""
df = pd.read_csv(io.StringIO(t), sep=';', comment='#', skiprows=[3])
df
Out[100]:
Header1 Header2
0 0 123
1 1 231
2 2 512
修改强>
对于您的初始问题,您可以在已完成操作后阅读csv,然后使用droplevel
覆盖列:
In [4]:
df.columns = df.columns.droplevel(1)
df
Out[4]:
Header1 Header2
0 0 123
1 1 231
2 2 512
答案 1 :(得分:0)
否则,你可以告诉pandas使用第一行作为带有header=2
选项的列名,
但是然后使用选项skiprows =[3]
跳过第二行,
它给出了以下命令:
>>pd.read_csv(datafile, sep=';', comment='#', header=0, skiprows=[1])
Header1 Header2
0 0 123
1 1 231
2 2 512