如何在pandas中处理excel中合并单元格的标题?

7vux5j2d  于 2023-06-20  发布在  其他
关注(0)|答案(1)|浏览(173)

我有一张合并细胞的Excel表格。

我希望有一个数据表,其列名为Specie_1_Poitn1、Specie_1_Poitn2、.....
我该怎么做?
我试过这个,但不是我想要的

df = pd.read_excel("/content/drive/MyDrive/Pollens.xlsx", sheet_name="Jun")
species_pattern = "Specie_"
species_columns = [col for col in df.columns[2:] if species_pattern in str(col)]
species_columns
dfPollensJun = pd.read_excel("/content/drive/MyDrive/Pollens.xlsx",sheet_name="Jun",header = 1)
for i, species in enumerate(species_columns):
    columns = dfPollensJun.columns[i*6+2:(i+2)*6+1]
    novas_colunas = [f"{species}_{coluna}" for coluna in columns]
    dfPollensJun.rename(columns=dict(zip(columns, novas_colunas)), inplace=True)
dfPollensJun

然后我得到了这个

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 360 entries, 0 to 359
Data columns (total 20 columns):
 #   Column                       Non-Null Count  Dtype         
---  ------                       --------------  -----         
 0   Data                         360 non-null    datetime64[ns]
 1   Hour                         360 non-null    object        
 2   Specie_1_Point_1             360 non-null    int64         
 3   Specie_1_Point_2             360 non-null    int64         
 4   Specie_1_Point_3             360 non-null    int64         
 5   Specie_1_Point_4             360 non-null    int64         
 6   Specie_1_Média               360 non-null    float64       
 7   Specie_1_Total               360 non-null    int64         
 8   Specie_2_Specie_1_Point_1.1  360 non-null    int64         
 9   Specie_2_Specie_1_Point_2.1  360 non-null    int64         
 10  Specie_2_Specie_1_Point_3.1  360 non-null    int64         
 11  Specie_2_Specie_1_Point_4.1  360 non-null    int64         
 12  Specie_2_Specie_1_Média.1    360 non-null    float64       
 13  Specie_2_Total.1             360 non-null    int64         
 14  Specie_3_Specie_2_Point_1.2  360 non-null    int64         
 15  Specie_3_Specie_2_Point_2.2  360 non-null    int64         
 16  Specie_3_Specie_2_Point_3.2  360 non-null    int64         
 17  Specie_3_Specie_2_Point_4.2  360 non-null    int64         
 18  Specie_3_Specie_2_Média.2    360 non-null    float64       
 19  Specie_3_Total.2             360 non-null    int64         
dtypes: datetime64[ns](1), float64(3), int64(15), object(1)
memory usage: 56.4+ KB
nukf8bse

nukf8bse1#

假设你的表从单元格A0开始,你可以这样做:

df = pd.read_excel(
    "/content/drive/MyDrive/Pollens.xlsx",
    sheet_name="Jun", index_col=[0, 1], header=[0, 1]
)

df = df.rename_axis(index=["Data", "Hour"])
df.columns = df.columns.map(lambda x: f"{x[0]}_{x[1]}")

df = df.reset_index() # optional ?

相关问题