Я создаю красивый и аккуратный сгруппированный фрейм данных, а затем использую эти данные на простом морском графике.Однако, когда я пытаюсь добавить метки к столбцам, я получаю следующую ошибку:
ValueError: невозможно преобразовать плавающий NaN в целое число
Я знаю, что это потому, что тамтолько одно значение (вместо двух) для одной из сгруппированных категорий.Как мне заставить его пометить его как «0»?
Я спустился по кроличьей норе на это целый день и ничего не нашел.Вот что я пробовал (разными способами):
- Вставка строки в сгруппированный фрейм данных.
- Использование
pd.fillna()
. - Создание функции для применения в предложении маркировки.
Я работаю с большим количеством данных, которые часто сталкиваются с такой проблемойтак что я был бы очень признателен за помощь в решении этой проблемы.Кажется, все так просто.Что мне не хватает?Спасибо!
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# my initial data set
d = {'year' : [2014,2014,2014,2015,2015,],
'status' : ["n","y","n","n","n"],
'num' : [1,1,1,1,1]}
df = pd.DataFrame(d)
# groupby to create another dataframe
df2 = (df["status"]
.groupby(df["year"])
.value_counts(normalize=True)
.rename("Percent")
.apply(lambda x: x*100)
.reset_index())
# create my bar plot
f = plt.figure(figsize = (11,8.5))
ax1 = plt.subplot(2,2,1)
sns.barplot(x="year",
y="Percent",
hue="status",
hue_order = ["n","y"],
data=df2,
ci = None)
# label the bars
for p in ax1.patches:
ax1.text(p.get_x() + p.get_width()/2., p.get_height(), '%d%%' % round(p.get_height()),
fontsize=10, color='red', ha='center', va='bottom')
plt.show()