Я создал случайный фрейм данных, имитирующий набор данных tips из seaborn :
import numpy as np
import pandas as pd
time = ['day','night']
sex = ['female','male']
smoker = ['yes','no']
for t in range(0,len(time)):
for s in range(0,len(sex)):
for sm in range(0,len(smoker)):
randomarray = np.random.rand(10)*10
if t == 0 and s == 0 and sm == 0:
df = pd.DataFrame(index=np.arange(0,len(randomarray)),columns=["total_bill","time","sex","smoker"])
L = 0
for i in range(0,len(randomarray)):
df.loc[i] = [randomarray[i], time[t], sex[s], smoker[sm]]
L = L + 1
else:
for i in range(0,len(randomarray)):
df.loc[i+L] = [randomarray[i], time[t], sex[s], smoker[sm]]
L = L + 1
Мой фрейм данных df имеет для каждого столбца тот же тип класса, что и у фрейма данных tips из набора данных Seaborn:
tips = sns.load_dataset("tips")
type(tips["total_bill"][0])
type(tips["time"][0])
numpy.float64
1018 * ул *
И так далее для других столбцов. То же, что мой dataFrame:
type(df["total_bill"][0])
type(tips["time"][0])
numpy.float64
1027 * ул *
Тем не менее, когда я пытаюсь использовать скрипичный сюжет Seaborn или factorplot в соответствии с документацией :
g = sns.factorplot(x="sex", y="total_bill", hue="smoker", col="time", data=df, kind="violin", split=True, size=4, aspect=.7);
У меня нет проблем, если я использую dataFrame tips , но когда я использую свой dataFrame, я получаю:
AttributeError: объект 'float' не имеет атрибута 'shape'
Я представляю, что это проблема с тем, как я передаю массив в dataFrame, но я не смог найти, в чем проблема, так как каждая проблема, которую я обнаружил в Интернете с тем же AttributeError, говорит, что это не тот тип класса, и, как показано выше, мой dataFrame имеет тот же тип класса, что и в документации Seaborn.
Есть предложения?