首页 > 解决方案 > Pandas Dataframe 标头与正确的列不匹配

问题描述

我用这段代码打印熊猫数据框

df=pd.read_csv(pd.compat.StringIO(output),skiprows=[1,2,3,4,5,6,7,9])

new_header = df.iloc[0]
df = df[1:]
df.columns = new_header

print(df)

它显示这样的输出。数据框标头与正确的列不匹配。ID 标题不在第 2 列。

0             ID    MAC            Name              Group   IP             Type            State  STA Uptime          ExtraInfo
1    0     10c0-ffff-0000 TEST-A1 @1ABCD -              AP12345        idle   0   -               -                 
2    1     10c0-ffff-000f TEST-A2 @2ABCD 10.20.0.1      AP12345        nor    1   12D:5H:10M:16S  - 

我用print(df.columns)它显示这样的输出。它看起来像标题不分开。

Index(['ID    MAC            Name              Group   IP             Type            State  STA Uptime          ExtraInfo'], dtype='object', name=0)

我导出到 csv 它在同一行中显示数据,就像这张图片一样。 在此处输入图像描述

所以我像这样使用 delim_whitespace 来编辑代码。

df=pd.read_csv(pd.compat.StringIO(output),skiprows=[1,2,3,4,5,6,7,9],delim_whitespace=True)

显示标题的输出是print(df.columns)这样的。

Index(['STA', 'Uptime', 'ExtraInfo'], dtype='object', name=('ID', 'MAC', 'Name', 'Group', 'IP', 'Type', 'State'))

我将数据导出到 csv,但它只显示标题 3 列,就像这张图片一样。

在此处输入图像描述

print(df)它显示这样的输出。

('ID', 'MAC', 'Name', 'Group', 'IP', 'Type', 'State')
STA  ... ExtraInfo
0
10c0-ffff-0000 TEST-A1        @1ABCD -              AP12345 idle  0    ...  -       
1
10c0-ffff-000f TEST-A2        @1ABCD 10.20.0.1      AP12345 nor   0    ...  -   

为什么数据框标题与正确的列不匹配?如何解决?

标签: pythonpandasdataframe

解决方案


根据您描述的数据,您可以结合两种方法,您只需关闭标题,然后像第一次尝试那样做。我希望这对你有用!

df=pd.read_csv(pd.compat.StringIO(output), header=None, skiprows=[1,2,3,4,5,6,7,9], delim_whitespace=True)

new_header = df.iloc[0]
df = df[1:]
df.columns = new_header

print(df.columns)

推荐阅读