Considering the following 2 lists of 3 dicts and 3 empty DataFrames
dict0={'actual': {'2013-02-20 13:30:00': 0.93}}
dict1={'actual': {'2013-02-20 13:30:00': 0.85}}
dict2={'actual': {'2013-02-20 13:30:00': 0.98}}
dicts=[dict0, dict1, dict2]
df0=pd.DataFrame()
df1=pd.DataFrame()
df2=pd.DataFrame()
dfs=[df0, df1, df2]
I want to recursively modify the 3 Dataframes within a loop, by using the following line:
for df, dikt in zip(dfs, dicts):
df = df.from_dict(dikt, orient='columns', dtype=None)
However, when trying to retrieve for instance 1 of the df outside of the loop, it is still empty
print (df0)
will return
Empty DataFrame
Columns: []
Index: []
When printing the df from within the for loop, we can see the data is correctly appended though.
How to make the loop so that it is possible to print the 3 dfs with their changes outside of the loop?
解决方案
In your loop, df is just a temporary value, not a reference to the corresponding list element. If you want to modify the list while iterating it, you have to reference the list by index. You can do that using Python's enumerate:
for i, (df, dikt) in enumerate(zip(dfs, dicts)):
dfs[i] = df.from_dict(dikt, orient='columns', dtype=None)