【问题标题】:How plot every ten dataframes in a dictionary ? Python Pandas如何在字典中绘制每十个数据帧?蟒蛇熊猫
【发布时间】:2022-01-11 02:49:04
【问题描述】:

我有一个包含 100 个数据帧的字典,我想每十个数据帧绘制一次。我试过这个,但我有这个错误:

keys = dfs.keys()  #keys = dict_keys([1,2,...,100])

# iterate through the dataframe dictionary keys and use enumerate
for idx, key in range(0,len(keys),10):                                      <----------
    dfs[key]['Value'].plot(ax=ax_array[idx], title=f'DataFrame: {key}')
plt.tight_layout()

TypeError: cannot unpack non-iterable int object

我知道问题在于 for 循环本身的定义。 但我想绘制:

dfs[1], dfs[10], dfs[20],...,dfs[100]

【问题讨论】:

  • idx, key in range(0,len(keys),10) range 输出单个数字。你期望它解压成两个值
  • keysdict 吗?
  • 你能说明keys 的定义位置吗

标签: python pandas dataframe dictionary


【解决方案1】:

使用

for idx, (key, df) in enumerate(dfs.items()):
    df['Value'].plot(ax=ax_array[idx], title=f"DataFrame: {key})

这会自动使用dfs 的键和值,并且使用enumerate,您也可以获得循环索引。只要确保对事物进行相应的分组:循环变量实际上是一个索引元组和一个键值元组,即(idx, (key, value)),你可以省略外括号,我已经将value替换为df 为清楚起见。


您实际上想要逐步遍历每个 x 项,这实际上不是使用字典的事情。因此,最好将所有数据框放在一个列表中。那么,上面会变成:

for idx, df in enumerate(dfs[::10]):
    df['Value'].plot(ax=ax_array[idx], title=f"DataFrame: {idx+1})

每 10 个数据帧绘制一次。

请注意我添加的 "... {idx+1}",因为您的问题表明您更喜欢从 1 开始对数据帧标识符进行编号(这是有道理的,因为它是输出给人类的),而 idx 是从 0 开始的。


现在你的实际问题和答案:

keys = sorted(dfs)
for idx, key in enumerate(keys[::10]):
    dfs[key]['Value'].plot(ax=ax_array[idx], title=f"DataFrame: {key+1})

您在这里看到,dfs[key] 需要单独访问,因为我们不能每第 n 个项目遍历 dict 的项目(如上所述)。

请注意,我添加了sorted()。您可能不想要或不需要它。较新版本的 (C)Python 保留了插入顺序,因此如果没有它,您的数据框将以添加时的方式显示。

另请注意,直接对字典进行排序意味着对其键进行排序(任何迭代字典的情况都是如此:它隐式地迭代其键)。

【讨论】:

  • 但是你如何处理每十个数据帧的情节? (绘制 dfs[1]、dfs[10]、dfs[20]、...)
  • 啊,对了,我逃过了。可能是因为使用字典,您并没有真正处理“每 x 个项目”,因为这些项目没有编号(或排序。从技术上讲,它们是,但不是从理论甚至使用的角度来看)。
  • @ThonyNadhir 我已经扩展了我的答案以包括步长因素,并补充说明为什么带有(有序)整数的 dict 并不是真正的最佳起点(它有它的用途,但不是在这里)。
猜你喜欢
  • 2022-01-22
  • 2022-01-10
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 2022-11-14
  • 1970-01-01
  • 2013-10-19
  • 2016-10-16
相关资源
最近更新 更多