在Pandas中动态命名DataFrame

时间:2015-09-15 04:49:46

标签: python python-2.7 pandas

想象一下,我有2个数据帧:

foo = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
bar = pd.DataFrame({'c':[7,8,9], 'd':[10,11,12]})

我希望将这些数据框中的每一个都集中在一起,并将它们放在具有动态名称的新数据框中。当我在python中查找动态命名的任何内容时,他们说,不要这样做,使用dictionary。 我不知道如何让它工作。基本上我想要以下内容:

foo_first = foo[0:1]
bar_first = bar[0:1]

但我希望能够在列表中循环。如果我想用字典做这件事,我会想象这样的事情:

dfs_list = [foo, bar]
dfs_dict = {}

for x in dfs_list:
    dfs_dict[x+'_first']=foo[0:1]

哪个不起作用。

你可能想知道我实际上要做什么,因为我的例子是如此随意和毫无意义。在我的真实世界示例中,我有几个按日期索引的数据框。我想根据当前年份和月份的这些旧数据框的名称创建新的数据框架。因此,如果foo和bar是带有日期索引的巨型数据集,我想自动化:

foo_year = foo['2015-01-01':'2015-12-31']
bar_year = bar['2015-01-01':'2015-12-31']
foo_month = foo['2015-08-01':'2015-08-31']
bar_month = foo['2015-08-01':'2015-08-31']

任何帮助?

1 个答案:

答案 0 :(得分:4)

我无法想到你不能使用DataFrame字典的任何理由。这样您就可以避免将变量名称视为数据:

whole_dataframes = {"foo": foo, "bar": bar}
first_dataframes = {name: value[:1] for name, value in whole_dataframes.items()}

我使用您已描述的foobar变量来初始化第一个字典,但您可以跳过该步骤直接在字典中创建值:

whole_dataframes = {}
whole_dataframes["foo"] = pd.DataFrame({'a': [1,2,3], 'b': [4,5,6]})
whole_dataframes["bar"] = pd.DataFrame({'c':[7,8,9], 'd':[10,11,12]})