我有5张工作表,并创建了一个脚本来进行大量的格式化,我对每张工作表进行了测试,它工作得很完美。
import numpy as np
import pandas as pd
FileLoc = r'C:\T.xlsx'
Sheets = ['Alex','Elvin','Gerwin','Jeff','Joshua',]
df = pd.read_excel(FileLoc, sheet_name= 'Alex', skiprows=6)
df = df[df['ENDING'] != 0]
df = df.head(30).T
df = df[~df.index.isin(['Unnamed: 2','Unnamed: 3','Unnamed: 4','ENDING' ,3])]
df.index.rename('STORE', inplace=True)
df['index'] = df.index
df2 = df.melt(id_vars=['index', 2 ,0, 1] ,value_name='SKU' )
df2 = df2[df2['variable']!= 3]
df2['SKU2'] = np.where(df2['SKU'].astype(str).fillna('0').str.contains('ALF|NOB|MET'),df2.SKU, None)
df2['SKU2'] = df2['SKU2'].ffill()
df2 = df2[~df2[0].isnull()]
df2 = df2[df2['SKU'] != 0]
df2[1] = pd.to_datetime(df2[1]).dt.date
df2.to_excel(r'C:\test.xlsx', index=False)
但是当我在Sheet_name = Sheets
中分配一个列表时,它总是产生一个错误的KeyError: 'ENDING'
。代码的这一部分:
Sheets = ['Alex','Elvin','Gerwin','Jeff','Joshua',]
df = pd.read_excel(FileLoc,sheet_name='Sheets',skiprows=6)
有没有合适的方法来做这件事,比如循环?
我期望的结果是执行我创建的格式,并将其合并到一个excel文件中。
注:所有工作表都具有相同的格式。
发布于 2021-10-31 19:59:37
在使用read_excel
方法时,如果给出参数sheet_name=None
,就会得到一个以表名称为键、以相关的DataFrame为值的OrderedDict
。因此,您可以应用此方法并使用.items()
遍历字典。
代码应该是这样的,
dfs = pd.read_excel('your-excel.xlsx', sheet_name=None)
for key, value in dfs.items():
# apply logic to value
如果您希望合并工作表中的数据,则可以使用.append()
。我们可以在将逻辑应用于每个工作表中的数据之后追加数据。看起来就像这样,
combined_df = pd.DataFrame()
dfs = pd.read_excel('your-excel.xlsx', sheet_name=None)
for key, value in dfs.items():
# apply logic to value, which is a DataFrame
combined_df = combined_df.append(sheet_df)
https://stackoverflow.com/questions/69792359
复制