Это довольно необычный способ хранения данных в кадре данных.Два варианта (я бы порекомендовал вариант B):
A.Пользовательское отображение в seaborn
Действительно, seaborn изначально не поддерживает такой формат.Вы можете построить свою собственную функцию для построения графика в сетке.
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame(index=np.arange(0,4), columns=('sample','class','values'))
for iloc in [0,2]:
df.loc[iloc] = {'sample':iloc,
'class':'raw',
'values':np.random.random(5)}
df.loc[iloc+1] = {'sample':iloc,
'class':'predict',
'values':np.random.random(5)}
grid = sns.FacetGrid(df, col="class", row="sample")
def plot(*args,**kwargs):
plt.plot(args[0].iloc[0], **kwargs)
grid.map(plot, "values")
B.Unnesting
Однако я бы посоветовал сначала «развернуть» фрейм данных и избавиться от пустых массивов внутри ячеек.
pandas: Когда содержимое ячеек является списками, создайте строку длякаждый элемент в списке показывает способ сделать это.
import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
df = pd.DataFrame(index=np.arange(0,4), columns=('sample','class','values'))
for iloc in [0,2]:
df.loc[iloc] = {'sample':iloc,
'class':'raw',
'values':np.random.random(5)}
df.loc[iloc+1] = {'sample':iloc,
'class':'predict',
'values':np.random.random(5)}
res = df.set_index(["sample", "class"])["values"].apply(pd.Series).stack().reset_index()
res.columns = ["sample", "class", "original_index", "values"]
![enter image description here](https://i.stack.imgur.com/l5b56.png)
Затем используйте FacetGrid
обычным способом.
grid = sns.FacetGrid(res, col="class", row="sample")
grid.map(plt.plot, "original_index", "values")