【问题标题】:Create different dataframes from dictionary从字典创建不同的数据框
【发布时间】:2020-09-04 17:20:51
【问题描述】:

我已经创建了一本字典,方法是使用这种编码将一些雨量计按它们的代码分组

dict_of_gauges = {k: v for k, v in PE_14.groupby('gauge_code')}

这给了我一些如下所示的条目

 11800  261070705A  PAULISTA    PE 2014-08-21 17:10:00      0.2
 11801  261070705A  PAULISTA    PE 2014-08-21 17:20:00      0.0
 11802  261070705A  PAULISTA    PE 2014-08-21 17:30:00      0.2
 11803  261070705A  PAULISTA    PE 2014-08-21 17:40:00      0.0
 11804  261070705A  PAULISTA    PE 2014-08-21 18:00:00      0.0
[3966 rows x 5 columns],
 '261070704A':        gauge_code      city state            datetime  rain_mm
 11493  261070704A  PAULISTA    PE 2014-08-21 21:20:00      0.2
 11494  261070704A  PAULISTA    PE 2014-08-21 21:30:00      0.0
 11495  261070704A  PAULISTA    PE 2014-08-21 21:40:00      0.0
 11496  261070704A  PAULISTA    PE 2014-08-21 21:50:00      0.0
 11497  261070704A  PAULISTA    PE 2014-08-21 22:00:00      0.0
[4180 rows x 5 columns],

现在我真的很想为它们中的每一个创建数据框,并指定诸如“df1”、“df2”等名称……但我似乎不知道如何在 FOR 中做到这一点。 我最终使用的代码是

df1 = pd.DataFrame.from_records(dict_of_gauges['261070703A'])
df2 = pd.DataFrame.from_records(dict_of_gauges['261070705A'])
.
.
.

但是多次做同样的事情不是很专业,我不知道如何分配这些名称,我尝试制作的伪代码(如下)并没有真正起作用,因为它覆盖了“df”正如预期的那样,每个循环。

listdfs = ['df0','df1','df2','df3','df4','df5']
for df, gauge in zip(listdfs, dict_of_gauges):
    df = pd.DataFrame.from_records(dict_of_gauges[gauge]) 

有人可以给我一些启示吗?

【问题讨论】:

  • 利用现有的字典结构并将字典中的键重命名为相关/易于调用的内容更简单、更容易。例如。将“261070703A”更改为“df1”。您将受益于能够以编程方式更新名称并保持非常有用的字典结构。
  • 这个列表理解有帮助吗?一种或另一种方式,您最终会得到一个数据框列表dframes = pd.DataFrame.from_records(dict_of_gauges[key]) for key in dict_of_gauges.keys()
  • 这能回答你的问题吗? How do I create a variable number of variables?

标签: python pandas for-loop iteration


【解决方案1】:

可能最好的方法是只使用groupby() 的结果。

>>> gb = PE_14.groupby('gauge_code')
>>> df0 = gb.get_group("261070705A")     # Get a single group.
>>> list(gb.groups)
['261070705A', '261070704A', ...]

因此,如果您需要遍历不同的组,请执行以下操作

>>> for key in gb.groups:
...     groupdf = gb.get_group(key)
...     # ... do something with the group data frame.

在for 循环中创建重复的新变量是一个问题,但您可以很容易地制作一个数据帧字典,使它们易于跟踪,而无需每次都重新计算 groupby。事实上,这就是您在第一行代码中已经完成的工作!不要使用df1,只需使用dict_of_gauges['261070705A']。如果这太冗长并且您不关心密钥,您也可以将它们放在一个列表中:

>>> gauge_dfs = [gb.get_group(key) for key in gb.groups]

另一方面,dict_of_gauges['261070705A'] 比 gauge_dfs[0] 更具可读性。

【讨论】:

  • 这太有帮助了!!我仍在学习如何进入 Python、机器学习和一般编程,非常感谢您的回答
猜你喜欢
  • 2022-07-12
  • 2021-12-30
  • 2016-01-14
  • 2017-07-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 2019-05-27
相关资源
最近更新 更多