import pandas as pd
path = r"

df = pd.read_excel(path)  # excel列名行 iloc~1

# 列名在excel第3行  iloc~row_col-2
# excel第一行 read_excel df默认列名行
# excel列名行 row_col
# 由于read_excel后无法指定row_col为df.columns 本函数无法适用于excel列名行就是df.columns的情况
def clean_df(df, row_col=3):  # 初始情况 df.excel列名行 iloc~row_col-2
    df_col = df.columns.to_frame().T
    df_concat = pd.concat([df_col, df])  # 插入excel第一行 即df列名行 此时 excel列名行 iloc~row_col-1
    df_concat.columns = df.iloc[row_col-2]  # 修改列名 为excel列名行
    df_concat.reset_index(drop=True, inplace=True)  # 此时 excel列名行 loc~row_col-1 修改index.label  本函数不适用于read_excel指定index_col的情况
    # df_concat.drop(index=row_col-1, inplace=True)  # 剔除excel列名行  # drop.index=label [labels]
    df_concat.drop(index=range(1, row_col), inplace=True)  # 剔除excel列名行 与df列名行之间的数据  本函数不适用于excel列名行以上有多行关键信息的情况
    # print(df_concat.head())
    # print(df_concat.iloc[[0]])
    # print(df_concat.iloc[1:].head())
    return df_concat, df_concat.iloc[[0]], df_concat.iloc[1:]

print(clean_df(df))

# 由于read_excel后无法指定row_col为df.columns 本函数无法适用于excel列名行就是df.columns的情况


如果一开始就用read_excel.header 需设置read_excel.header=row_col-1