我有一个数据帧字典,数据帧基本上是文件夹中的csv文件。
因此,我想将此函数应用于字典中的每个数据帧:
def transformations(df):
row_1 = list(df.iloc[0])
row_1_upd = list(filter(None,row_1))
row_2 = list(df.iloc[1])
row_2_upd = list(filter(None,row_2))
new_cols = row_1_upd+row_2_upd
list_df_col = list(df.columns)
for i in range(len(list_df_col)):
list_df_col[i]=new_cols[i]
df.columns = list_df_col
df = df.iloc[2:]
return df
我还能够提取存储在字典中的每个数据帧的名称:
filenames = os.listdir(r'C:UsersxxxxPython_ProjectsAnalytic_PBI') # lists all csv files in your directory
def extract_name_files(text): # removes .csv from the name of each file
name_file = text.strip('.csv')
return name_file
names_of_files = list(map(extract_name_files,filenames))
print(names_of_files)
['Analytic_2021_Actual_Budget_FTE', 'Analytic_2021_Actual_Budget_MarginDirectCost', 'Analytic_2021_Actual_Budget_OperationalHqOverheadsCost', 'Analytic_2022_Actual_FTE', 'Analytic_2022_Actual_MarginDirectCost', 'Analytic_2022_Actual_OperationalHqOverheadsCost', 'Analytic_2022_F1_U_FTE', 'Analytic_2022_F1_U_MarginDirectCost', 'Analytic_2022_F1_U_OperationalHqOverheadsCost']
所以我想做的是在字典上循环,使用字典dataStorage
中的names_of_files
调用数据帧的名称,并为每个数据帧应用函数:
for i, df in dataStorage.items():
df = dataStorage[names_of_files[i]]
df = transformations(df)
但我得到了这个错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Input In [359], in <cell line: 1>()
1 for i, df in dataStorage.items():
----> 2 df = dataStorage[names_of_files[i]]
3 df = transformations(df)
TypeError: list indices must be integers or slices, not str
我知道如果我像这样直接应用我的功能:
dataStorage["Analytic_2021_Actual_Budget_FTE"] = transformations(dataStorage["Analytic_2021_Actual_Budget_FTE"])
它之所以有效,是因为我进行了测试。
我可能在这里过于复杂了,但我对的了解有限
我认为过于复杂了
for i, df in dataStorage.items():
df = dataStorage[names_of_files[i]]
df = transformations(df)
如果这个循环的目标只是访问df
,那么您根本不需要names_of_files
。以下内容应该同样有效,因为您可以从for
循环的标头中获得df
for i, df in dataStorage.items():
#df = dataStorage[names_of_files[i]]
df = transformations(df)
您看到的错误是,i
不是像调用enumerate
那样的索引,而是dataStorage
字典的键(字符串?(,因此您不能使用它来索引到names_of_files
列表中。您可以将print
语句放在for循环中,以准确地查看i
和df
是什么。不过你不需要做所有这些工作。