【问题标题】:Pandas Column Consists of Arrays, Plot This Using plt.imshow()Pandas 列由数组组成,使用 plt.imshow() 绘制
【发布时间】:2021-04-26 15:59:28
【问题描述】:

所以我的数据结构有点不寻常。这是我正在使用的示例:

import numpy as np
import pandas as pd

dict = {'data': [[1,2,3], [2,3,4], [3,4,5]], 'parameter': [10, 11, 12]}
df = pd.DataFrame(dict)

换句话说,df['data'] 中的每一行都包含一个数组。

我需要使用 matplotlib 的 imshow() 函数来绘制它,但我在使用 df['data'] 中的数组时遇到了困难。我试过使用df['data'].to_numpy(),但这会返回一个dtype=object,这是imshow 无法处理的。尝试绘制时出现此错误:

TypeError: dtype 对象的图像数据无法转换为浮点数

确切地说,这是我尝试运行的:

import pylab as plt
plt.imshow(df['data'].to_numpy())

我四处阅读,似乎找不到任何有类似例子的人。

明确一点:我需要 DataFrame to imshow,我不能直接从代码中的字典中绘图。我也不想对新列表进行任何附加,因为我的数据集很大并且会大大减慢速度。


编辑 1:

要回答 cmets 中的问题,这是我所追求的情节类型。 x 轴包含df['data'] 中的数组,而y 轴最终将是df['parameter']


编辑 2:

我想我需要进一步澄清我的问题。我希望准确地重现这个情节。

为了制作这个情节,我做了以下事情:

rows = []
for i in df['data']: 
    rows.append(i)
plt.imshow(rows)

此解决方案适用于我的数据,但我正在寻找一种更有效的方式来做同样的事情。即不涉及循环和追加的方法。

【问题讨论】:

  • 你想要什么样的情节?只是将其绘制为方阵?会不会是某些列表的大小不同?
  • @DavidS,我添加了一个编辑。如果这能阐明我的目标,请告诉我。
  • x 轴是否包含来自df['data']? 的展平数组如果是,该范围是否包含来自整个(df['data']) 列的展平数组的值范围?跨度>
  • @theSekyi,x 轴与我在上面列出的完全一样。即,y=df['parameter'][0]x=df['data'][0],其中 x 和 y 分别是 x 轴和 y 轴值。

标签: python pandas dataframe matplotlib imshow


【解决方案1】:

您可以执行以下操作:

使用df.explodedata 列取消列出到不同的行,然后进行绘图。

x = df.explode('data').reset_index()
plt.imshow(x[['data','parameter']].to_numpy().astype('float').T)

这将产生:

基本上,x[['data','parameter']].to_numpy().astype('float').T 会为您提供所需的 numpy 数组,您可以在其中随意绘制。

根据用户评论编辑:

plt.imshow(np.array(df["data"].values.tolist()).astype('float'))

这将产生:

【讨论】:

  • 这是一个很好的解决方案,但不是我所追求的。请查看我的最新编辑。
  • @NoVa 所以你不想使用parameter?
  • 我愿意,但为了简单起见,我们说不。
  • 我只在我的第一个示例中使用它以更好地复制我的数据。 parameter 实际上只是一个 y 标签,它对除此之外的绘图没有影响。
  • 嗯...我收到此错误:TypeError: Image data of dtype object cannot be converted to float。那行代码正确地提取了数组,但我仍然留下了原来的错误。
猜你喜欢
  • 2019-08-26
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 2019-04-20
相关资源
最近更新 更多