Pandas read_csv:忽略第二个标题行

elz*_*ell 4 python csv pandas

我有这样的数据文件:

# comment
# comment
Header1;Header2
Unit1;Unit2
0;123
1;231
2;512
Run Code Online (Sandbox Code Playgroud)

我想使用 Pandas.read_csv 读取它们,使用该行Header1;Header2作为标题但忽略Unit1;Unit2.

到目前为止我所拥有的是

pd.read_csv(datafile, sep=';', comment='#', header=[0,1])
Run Code Online (Sandbox Code Playgroud)

这几乎可以满足我的要求,除了它从两个标题行创建一个多标题:

  Header1 Header2
    Unit1   Unit2
0       0     123
1       1     231
2       2     512
Run Code Online (Sandbox Code Playgroud)

如何告诉 Pandas 只将第一行作为标题?

编辑:这是我想要的输出:

  Header1 Header2
0       0     123
1       1     231
2       2     512
Run Code Online (Sandbox Code Playgroud)

EdC*_*ica 5

您可以[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
Run Code Online (Sandbox Code Playgroud)

编辑

对于您最初的问题,您可以在已完成的情况下读取 csv,然后使用以下内容覆盖列droplevel

In [4]:
df.columns = df.columns.droplevel(1)
df

Out[4]:
   Header1  Header2
0        0      123
1        1      231
2        2      512
Run Code Online (Sandbox Code Playgroud)


小智 1

否则,您可以使用选项告诉 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
Run Code Online (Sandbox Code Playgroud)