将列标签与 Pandas MultiIndex 合并

Merge column labels with Pandas MultiIndex

提问人:nath183 提问时间:10/13/2023 最后编辑:nath183 更新时间:10/13/2023 访问量:56

问:

我正在尝试处理从 Excel 电子表格导入的 pandas 数据帧中的数据。

导入数据时,我将其导入,使其具有多索引结构。

blid_df = pd.read_excel('OriginalClean.xlsx', header=[0,1,2], index_col=None)

这将生成此数据帧。dataframe

我想按国家/地区编制索引,我可以使用set_index但是我的所有国家/地区都变成了元组,例如(澳大利亚)。

我还想让国家类型位于正确的级别,并删除这些未命名的级别标签。

下面是我试图实现的一个例子。enter image description here

Python Pandas DataFrame 多索引

评论

1赞 Suraj Shourie 10/13/2023
请将数据发布为文本/代码而不是图像。还要提及您尝试过的内容
0赞 gl00ten 10/13/2023
您可以在加载数据后重命名所有列。拥有同名的列,不会让它高兴。

答:

1赞 Timeless 10/13/2023 #1

也许我错了,但我想象/假设您正在以这种方式阅读多标题电子表格:

df = pd.read_excel("file.xlsx", header=[0, 1, 2])

您可以尝试以下方法:

df = (
    pd.read_excel("file.xlsx", index_col=[0, 1], header=[0, 1, 2]) # 1st chain
        .rename_axis(index=["Country", "Country Type"], columns=[None]*3)
)

df.index.nlevels   # should be 2 (previously 1)
df.columns.nlevels # should be 3

如果不处理 Excel 文件,请将第一个链替换为 。df.set_index(list(df.columns[:2]))

评论

0赞 nath183 10/15/2023
非常感谢你,这给了我几个小时的问题
0赞 gl00ten 10/13/2023 #2

您可以在加载数据后重命名所有列。拥有同名的列,不会让它高兴。 试试这样的方法:

import pandas as pd

#proper non repeated column names
column_names = ["new_column_name1", "new_column_name2", "new_column_name3"]
data = pd.read_csv("your_data.csv", names=column_names, header=None)

#proper data_types
data_types = {
    "new_column_name1": str,   # Example: Integer data type
    "new_column_name2": float, # Example: Float data type
    "new_column_name3": int, # Example: Float data type
}

# Set data types
data = data.astype(data_types)

# Use the first column as the index
data = data.set_index("new_column_name1") 

# Reindex the DataFrame
data = data.reindex(drop=True)