Python Pandas列由数组组成,使用plt.imshow()绘制此列
所以我有一些数据是以一种稍微不寻常的方式构造的。下面是我正在使用的示例:Python Pandas列由数组组成,使用plt.imshow()绘制此列,python,pandas,dataframe,matplotlib,imshow,Python,Pandas,Dataframe,Matplotlib,Imshow,所以我有一些数据是以一种稍微不寻常的方式构造的。下面是我正在使用的示例: 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']中使用数
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转到imshow,我不能直接从代码中的字典进行绘图。我也不想在新列表中添加任何内容,因为我的数据集很大,会大大降低速度
编辑1: 回答评论中的一个问题,这就是我想要的情节类型。x轴包含
df['data']
中的数组,而y轴最终将是df['parameter']
。
编辑2: 我想我需要进一步澄清我的问题。我想准确地再现这个情节 为了绘制此图,我做了以下工作:
rows = []
for i in df['data']:
rows.append(i)
plt.imshow(rows)
这个解决方案适用于我的数据,但我正在寻找一种更有效的方法来做同样的事情。i、 例如,一种不涉及循环和附加的方法。您可以执行以下操作:
rows = []
for i in df['data']:
rows.append(i)
plt.imshow(rows)
用于将数据
列取消列出到不同的行,然后打印
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数组,您可以在其中根据需要进行绘图
根据用户评论进行编辑:
这将产生:
您想要什么样的绘图?把它画成方阵?是否有些列表会有不同的大小?@DavidS,我添加了一个编辑。让我知道这是否澄清了我的目标。x轴是否由
df['data']中的展平数组组成?
如果是,范围是否由整个(df['data']
)列中展平数组的值范围组成?@theSekyi,x轴与我上面的布局完全相同。i、 例如,y=df['parameter'][0]
和x=df['data'][0]
,其中x和y分别是x轴和y轴的值。这是一个很好的解决方案,但不是我想要的。请查看我的最新编辑。@NoVa所以你不想使用参数
?我想,但为了简单起见,我们说不。我只是在我的第一个示例中使用它,以便更好地复制我的数据<代码>参数实际上只是一个y型标签,它对绘图没有影响。嗯。。。我遇到了以下错误:TypeError:dtype对象的图像数据无法转换为float
。这行代码正确地提取了数组,但我仍然保留着最初的错误。