【发布时间】:2020-10-31 05:16:40
【问题描述】:
我想使用我在 Jupyter 笔记本中加载的新名称(在此示例中为 df1_m、df2_m 等)创建数据帧的修改副本(仅包含某些列的副本)。但是由于某种原因,当我尝试使用新名称打印副本 dfs 时,以下代码会生成空表。当我尝试使用循环内的代码自行执行此操作时,它可以工作。因此,出于某种原因,将此代码放在 for 循环中会导致出现问题。可能出了什么问题?
这是不起作用/产生空 dfs 的“for 循环”代码:
parameter_cols = [col1, col2, col3]
df1_m = pd.DataFrame()
df2_m = pd.DataFrame()
df3_m = pd.DataFrame()
df4_m = pd.DataFrame()
df5_m = pd.DataFrame()
df6_m = pd.DataFrame()
df_list = [df1, df2, df3, df4, df5, df6]
df_m_list = [df1_m, df2_m, df3_m, df4_m, df5_m, df6_m]
year_list = [2015, 2016, 2017, 2018, 2019, 2020]
for df, df_m, yr in zip(df_list, df_m_list, year_list):
df_m = df[parameter_cols]
df_m = df_m.assign(year = yr)
但是循环外的相同代码可以工作并生成所需的副本 df (df1_m):
df1_m = df1[parameter_cols]
df1_m = df1_m.assign(year=2015)
这是为什么?
【问题讨论】:
-
虽然这看起来总体上是一个非常糟糕的主意,但您可能正在尝试在
range(len(df_list))上使用 for 循环或类似的东西,并通过循环内的索引引用您的列表。您现在拥有它的方式是创建一个名为df_m的新 df 并反复覆盖它。 -
@Chris 即使有很多数据框,最好的做法是在没有循环的情况下单独使用它们?你说这是一个坏主意,但我认为尽可能压缩代码是更好的代码实践
标签: python pandas dataframe for-loop