首页 > 解决方案 > 通过将元素设置为变量来迭代列表

问题描述

我想使用for循环创建 12 个标有月份名称的数据框。所以我创建了一个包含月份名称的列表list_month。但我无法idf_[i]for循环中那样插入变量。

我正在尝试做的操作是为列表中包含的每个月创建一个新的数据df_new_monthdf_new_feb = df_feb[df_feb['my_feature'] > 20]

我应该采用不同的方法吗?

list_month = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec']
for i in list_month:
    df_new_[i] = df_[i][df_[i]['my_feature'] > 20]
    print(i, list_month[i])

我得到的错误是:

Traceback (most recent call 
  last):File"/Users/annalisa/anaconda3/lib/python3.7/site_ 
  packages/IPython/core/interactiveshell.py", line 3325, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-50-c09b1f63eb51>", line 3, in <module>
    df_new_[i] = df_[i][df_[i]['my_feature'] > 20]
NameError: name 'df_' is not defined

标签: pythonpandaslistfor-loop

解决方案


鉴于我对您的理解正确,这相当骇人听闻,但应该可以工作:

list_month = ['jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec']
for i in list_month:
    exec("df_new_{month} = df_{month}[df_{month}['my_feature'] > 20]".format(month=i))

基本上它会创建一个字符串,看起来就像您在脚本中键入它并执行它一样。

但也许你应该重新考虑,而是将数据放入同一个 DataFrame 中

df_feb['new'] = ...

推荐阅读