Я не понимаю, почему один код работает, а другой нет - PullRequest
1 голос
/ 22 апреля 2019

Я попытался построить некоторые домашние задания и результаты тестов бок о бок, и у меня есть два набора кода, которые для меня достаточно похожи, но один выдает две гистограммы рядом, а другой - нет.

Язапустить мой код в среде Anaconda python 3.6 в Windows.Следующий код создаст проблему

    data = pd.DataFrame( np.random.uniform(low = 0.0, high = 100, size = (224,3)))
    data.columns = ['Section', 'hw_score', 'quiz_score']

    data['Section'] = data['Section'].apply(get_section)
    data.head(10)


    data['hw_score'].fillna(0,inplace=True)
    data['quiz_score'].fillna(0,inplace=True)
    data.isnull().sum()

    data.hw_score[ data.hw_score > 0 ].hist( bins = [0,10,20,30,40,50,60,70,80,90,100] )

    data.quiz_score[data.quiz_score > 0].hist( bins = [0,10,20,30,40,50,60,70,80,90,100] )

Я не уверен, почему следующий код не генерирует гистограммы, расположенные рядом:

plt.figure( figsize = (15,6) )
plt.subplot(1,2,1)
fig = data.hist(column='hw_score')
fig.set_title('Homework Score')

plt.subplot(1,2,2)
fig = data.hist(column='quiz_score')
fig.set_title('Quiz Score')

, а следующее:

plt.figure( figsize = (15,6) )
plt.subplot(1,2,1)
fig = data.hw_score[ data.hw_score > 0 ].hist( bins = [0,10,20,30,40,50,60,70,80,90,100] )
fig.set_title('Homework Score')

plt.subplot(1,2,2)
fig = data.quiz_score[data.quiz_score > 0].hist( bins = [0,10,20,30,40,50,60,70,80,90,100] )
fig.set_title('Quiz Score')

1 Ответ

1 голос
/ 22 апреля 2019

В вашем коде пропуска зажигания fig - это пустой массив, где нулевой элемент - это объект AxesSubplot.pandas docs предупреждает об этом .

Также сообщается, что вы можете передать ax непосредственно в pandas.DataFrame.hist, который мы можем отредактировать в вашем коде пропуска зажигания следующим образом:

fig = plt.figure( figsize = (15,6) )
ax = fig.add_subplot(1,2,1)
data.hist(column='hw_score', ax=ax)
ax.set_title('Homework Score')

ax = fig.add_subplot(1,2,2)
data.hist(column='quiz_score', ax=ax)
ax.set_title('Quiz Score')

plt.show()

Обратите внимание на изменения: fig теперь фактическая цифра, ax оси.Тип возвращаемого значения data.hist представляет собой массив осей, но нам это не нужно, и мы можем решить не хранить его где-либо.

РЕДАКТИРОВАТЬ: Итак, вы просилипочему другой блок кода работал.Короче говоря, это потому, что разработчикам pandas нравится реализовывать методы для pandas.DataFrame и pandas.Series.Итак, когда вы звоните:

fig = data.hw_score[ data.hw_score > 0 ].hist( bins = [0,10,20,30,40,50,60,70,80,90,100] )

data.hw_score[ data.hw_score > 0 ] - это pandas.Series.Рассматривая docs для pandas.Series.hist, нет никаких предупреждений о том, что иногда можно возвращать массив numpy как с pandas.DataFrame.hist.

, поскольку он не возвращает объект, завернутый вмассив, нам не нужно предпринимать никаких специальных мер для доступа к объекту AxesSubplot.

...