我有一个棘手的问题要问你,关于 pandas 中用于使用 seaborn 进行绘图的数据结构。
让我们想象一下,我有几个实验,每个实验都在不同的条件下进行。每个实验的结果都是一个有几千个浮点数的数组。
我正在考虑将所有实验结果存储在单个 pandas 数据框中,即所谓的长格式,即每一行都是一个实验,每一列都是一个变量。 几乎所有变量都用于定义实验条件,然后一个变量包含带有实验结果的浮点数组。
类似这样的:
df = pd.DataFrame({'id':[1,2], 'temp':[21,22], 'oven':[0,1], 'values':[[1,2,3,4,5], [10,11,12,12,15,16,17]]})
到目前为止一切顺利。
现在我想用seaborn来做一些绘图。想象一下,我想使用 id 作为类别来绘制值的直方图。
我会做:
sns.histplot(df, x='values', hue='id')
但是如果我这样做,我会收到一条错误消息,抱怨列表是不可散列的类型。
作为解决方法,我更改了数据结构,以便实验结果中的每个浮点数都有一行,但这使表变得不必要的巨大。
你对我有什么建议吗?
提前致谢 托托
平坦/整洁的 DataFrame 几乎是相同的,但每个点一行。
explode
你的数据集,这会起作用:
df_flat = df.explode('values')
sns.histplot(df_flat, x='values', hue='id')
输出: