将 .xlsx 导入 Pandas 时出现问题

问题描述 投票:0回答:1

我正在尝试从具有双标题列的 .xlsx 导入数据框。但是,当 .xlsx 文件包含 2 行时,无法正确读取第一个标题列。

import pandas as pd
#Python 3.12.7
#pandas 2.2.2
#openpyxl 3.1.5

df = pd.read_excel('2_rows_to_skip.xlsx', skiprows=[0,1], header=[0,1])
df2 = pd.read_excel('1_row_to_skip.xlsx', skiprows=[0], header=[0,1])
   
for col in df.columns:
    print(col)
    
print('-------------------')

for col in df2.columns:
    print(col)

打印结果:

('header1', 'A')
('Unnamed: 1_level_0', 'B')
('Unnamed: 2_level_0', 'C')
('header2', 'A')
('Unnamed: 4_level_0', 'B')
('Unnamed: 5_level_0', 'C')
-------------------
('header1', 'A')
('header1', 'B')
('header1', 'C')
('header2', 'A')
('header2', 'B')
('header2', 'C')

在需要跳过 2 行的文件中,由于未将 header1 分配给第二列和第三列,将 header2 分配给第 5 列和第 6 列,因此无法正确读取第一个标题列行。然而,.xlsx 文件中的相同数据帧只要跳过一行就可以正常工作。

知道是什么原因导致这个问题吗?

.xlsx文件上传在这里

python excel pandas
1个回答
0
投票

这可能是因为您合并了 Excel 文件中的单元格。对于 df,你可以尝试这样的事情:

import pandas as pd           

df = pd.read_excel("2_rows_to_skip.xlsx")
#Forward fill the values in the row with the header
df.iloc[1] = df.iloc[1].fillna(method='ffill', axis=0)
# Drop rows and resetindex
df = df.drop([0]).reset_index(drop=True)  # Drop the first row

# Make  the header
df.columns = df.iloc[0]
df = df[1:].reset_index(drop=True)
print(df.columns)

输出:

Index(['header1', 'header1', 'header1', 'header2', 'header2', 'header2'], dtype='object', name=0)
© www.soinside.com 2019 - 2024. All rights reserved.