我包括sheet_name=None
来分析每个表,但随后我在阅读columns
时遇到了问题。
import pandas
df = pd.read_excel('file.xlsx', sheet_name=None, index_col=[0])
df.columns = df.columns.str.split('_', expand=True)
I got this error message
df.columns = df.columns.str.split('_', expand=True)
AttributeError: 'dict' object has no attribute 'columns'
它在一张纸上完美地工作,为什么不能在多张纸上工作?
根据Pandas doc
sheet_namestr, int, list,或None,默认为0字符串用于工作表名称。整数用于零索引的工作表位置。字符串/整数列表用于请求多个表单。指定None获取所有工作表。
这意味着当sheet_name
被指定为None
时,Pandas将加载所有工作表作为单独的DataFrame
s,并将它们存储在dict
中,工作表名称作为键,相应的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
,然后返回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())
但是如果你知道你想要的表单的确切名称,那么就这样做:
df["<>"].column=df["<>"].columns.str.split('_', expand=True)
有关所有这些的更多信息请访问这里
sheet_name
: str, int, list,或None,默认为0字符串用于表名。整数用于零索引的工作表位置。字符串/整数列表用于请求多个表单。指定None获取所有工作表。
可用的情况下:
默认为0:第一个表作为DataFrame
1:第二个表作为DataFrame
Sheet1":加载名称为"Sheet1"的工作表
[0,1, "Sheet5"]:将第一,第二和名为"Sheet5"的工作表加载为DataFrame的字典
None:所有表。
解决方案:
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)