调用使用globals()在For循环内部创建的Pandas数据帧



我正在python中迭代50个文件,并将它们分别转储到panda数据帧中。然后,我根据原始数据帧中特定字段中的值,从每个数据帧创建三个新的数据帧。这三个新的帧有了新的名称,其中包括它们被过滤的值

行得通,耶!我得到了我所有的数据帧!

问题是,我使用global()调用创建这些数据帧,如果不在内核中显式键入每个单独的数据帧名称,我不知道如何访问它们。

你可能会问,我为什么要这么做?

例如,我想获取所有以"cd"结尾的数据帧,并将它们附加(并集)到最终的数据帧中。我不想明确地给他们50个人打电话。我想循环浏览数据帧的列表来完成这项任务。

关于如何实现这一点,或者重新编写代码,有什么建议吗?

我是iPython这些更密集的流程的新手,所以不管怎样都要改变。

    filelist = os.listdir()
    sum_list = ['CAKE', 'TWINKIES', 'DOUGHNUTS', 'CUPCAKES']
    for f in filelist:
        state = re.match('((w+){2})_', f)
        state_df = str(state.group(1)) + '_df'
        data = pd.read_csv(f, low_memory = False)
        df = pd.DataFrame(data)
        for x in sum_list:
            sdo = state_df + '_' + x.lower()
            globals()[sdo] = pd.DataFrame(df.loc[df['summary_level'] == x])

我认为一个更好的方法是创建自己的字典,而不是使用全局字典!只需创建自己的列表并附加到某个列表或列表字典中?(取决于分类):

dfs = {}
for f in filelist:
    ...
    df = pd.read_csv(f)  # this returns a DataFrame
    for x in sum_list:
        ...
        dfs[sdo] = df[df.summary_level == x]  # again, this return a DataFrame

您可以使用默认dict,并将每个dict分配给一个子字典:

from collection import defaultdict
dfs = defaultdict({})
...
        dfs[x][sdo] = ...

,即dfs['CAKE']将是所有CAKE数据帧

相关内容

  • 没有找到相关文章