python pandas 中分析多个工作表的 AttributeError

AttributeError for analyzing multiple sheets in python pandas

我包括了 sheet_name=None 来分析每一个 sheet 但后来我在阅读 columns 时遇到了问题。

import pandas

df = pd.read_excel('file.xlsx', sheet_name=None, index_col=[0])

df.columns = df.columns.str.split('_', expand=True)

我收到这条错误消息

    df.columns = df.columns.str.split('_', expand=True)
AttributeError: 'dict' object has no attribute 'columns'

它在一个 sheet 上运行完美,为什么不能在多个 sheet 上运行?

根据Pandas doc

sheet_namestr, int, list, or None, default 0 Strings are used for sheet names. Integers are used in zero-indexed sheet positions. Lists of strings/integers are used to request multiple sheets. Specify None to get all sheets.

这意味着当 sheet_name 指定为 None 时,Pandas 加载所有 sheet 作为单独的 DataFrame 并将它们存储在 dict 以 sheet 名称作为键,相应的 DataFrame 作为值。

要达到类似的效果,您可能需要:

df_dict = pd.read_excel('file.xlsx', sheet_name=None, index_col=[0])
for name, df in df_dict.items():
    df.columns = df.columns.str.split('_', expand=True)

当您将 sheet_name 指定为 None 时,那么 returns dict,这就是您获得 'dict' object has no attribute 'columns' 的原因,但是如果您想要获得DataFrame 然后你可以试试这个:

for key in df:
     df[key].columns = df[key].columns.str.split('_', expand=True)
     print(df[key].head())

但是如果您知道您想要的 sheet 的确切名称,那么请执行以下操作:

df["<>"].column=df["<>"].columns.str.split('_', expand=True)

有关所有这些的更多信息,请访问 here

sheet_name : str, int, list, or None, default 0

Strings are used for sheet names. Integers are used in zero-indexed sheet positions. Lists of strings/integers are used to request multiple sheets. Specify None to get all sheets.

Available cases:

Defaults to 0: 1st sheet as a DataFrame

1: 2nd sheet as a DataFrame

"Sheet1": Load sheet with name “Sheet1”

[0, 1, "Sheet5"]: Load first, second and sheet named “Sheet5” as a dict of DataFrame

None: All sheets.

解决方案:

dfs = pd.read_excel('file.xlsx', sheet_name=None, index_col=[0])

with pd.ExcelWriter('output_file.xlsx') as writer:
    for name, df in dfs.items():
        print(name)
        df.columns = df.columns.str.split('_', expand=True)