AttributeError: объект 'numpy .ndarray' не имеет атрибута 'get' - PullRequest
0 голосов
/ 09 июля 2020

На самом деле я пытаюсь построить график подсчета для моего numpy массива с формой (5216,1), используя библиотеку seaborn. Когда я пытаюсь вот так

train_y.shape
sns.set(style="darkgrid")
ax = sns.countplot(x="class", data=train_y)

Но это проходит вот так

AttributeError                            Traceback (most recent call last)
<ipython-input-33-44c4401caea5> in <module>
    1 sns.set(style="darkgrid")
----> 2 ax = sns.countplot(x="class", data=train_y)

/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py in countplot(x, y, hue, data, order, hue_order, orient, color, palette, saturation, dodge, ax, **kwargs)
 3553                           estimator, ci, n_boot, units, seed,
 3554                           orient, color, palette, saturation,
-> 3555                           errcolor, errwidth, capsize, dodge)
 3556 
 3557     plotter.value_label = "count"

/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py in __init__(self, x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge)
 1613         """Initialize the plotter."""
 1614         self.establish_variables(x, y, hue, data, orient,
-> 1615                                  order, hue_order, units)
 1616         self.establish_colors(color, palette, saturation)
 1617         self.estimate_statistic(estimator, ci, n_boot, seed)

/opt/conda/lib/python3.7/site-packages/seaborn/categorical.py in establish_variables(self, x, y, hue, data, orient, order, hue_order, units)
  141             # See if we need to get variables from `data`
  142             if data is not None:
--> 143                 x = data.get(x, x)
  144                 y = data.get(y, y)
  145                 hue = data.get(hue, hue)

AttributeError: 'numpy.ndarray' object has no attribute 'get'

кто-нибудь, пожалуйста, помогите мне решить эту ошибку

1 Ответ

1 голос
/ 09 июля 2020

Если вы хотите использовать массив numpy вместо pandas.Dataframe, вы можете просто передать массив как аргумент x или y в countplot.

Например

import numpy
import seaborn

data = numpy.array([1, 2, 2, 3, 3, 3])
ax = seaborn.countplot(x=data)

Похоже, это не работает с многомерными массивами. Не зная больше о том, какие данные вы рисуете, трудно сказать наверняка, как построить конкретный график, который вы хотите. Однако, поскольку ваш массив имеет только длину 1 во втором измерении, как насчет того, чтобы просто изменить форму массива, чтобы он стал одномерным? pandas.DataFrames вместо numpy.arrays. Примеры в docs , которые, я полагаю, вы пытались подражать здесь, используют DataFrames. Вы можете преобразовать свой массив в DataFrame и указать имя переменной, которую вы позже построите.

Например,

import numpy
import seaborn as sns
import pandas

data = numpy.array([1, 2, 2, 3, 3, 1, 1, 1, 2])
df = pandas.DataFrame(data=data, columns=["variable"])

Здесь "variable" - имя столбца в df 'таблице'. Затем, когда вы строите с countplot, укажите этот столбец в качестве аргумента для x.

ax = sns.countplot(x="variable", data=df)
...