#python #pandas #matplotlib
Вопрос:
Я столкнулся с проблемой, когда мои данные в какой-то момент были перечислены как объект, а затем была выдана ошибка из-за того, что они были «плавающими»
У меня есть столбцы, которые прямо сейчас набраны как объекты здесь:
Household Energy Water Food
Brunt 23% 34% 43%
Liv 17% 29% 54%
Rowan 37% 22% 41%
Lisz 32% 32% 36%
Я пытаюсь удалить»%», перевести их в десятичную форму и превратить их в int
следующий метод:
df.update(df.apply(lambda x : pd.to_numeric(x.str.rstrip('%'),downcast='integer',errors='coerce'))/100)
Но , как я проверяю df.info()
, в нем объекты указываются как неподвижные объекты.
Я пытаюсь изобразить это в виде горизонтальной гистограммы, на которой значение % указано на соответствующих столбцах us matplotlib. Но когда я пытаюсь применить следующее:
df.plot(
x = 'Household',
kind = 'barh',
stacked = True,
title = 'Cluster 1021 HH Consumption',
mark_right = True)
df_total = df.iloc[:,-17:-1].sum(axis=0)
df_rel = df[df.columns[1:]].div(df_total, 0)*100
for n in df_rel:
for i, (cs, ab, pc, tot) in enumerate(zip(df.iloc[:, 1:].cumsum(1)[n], df_rel[n], df_total[n])):
plt.text(tot, i, str(tot), va='center')
plt.text(cs - ab/2, i, str(np.round(pc, 1)) '%', va='center', ha='center')
Это дает мне TypeError: 'float' object is not iterable
во втором for
. Как такое может быть? Как я могу это исправить?
Ответ №1:
Сначала создается список столбцов, содержащих '%'
символ и в которые вы хотите преобразовать int
:-
col=df.columns[1:]
Вывод приведенного выше кода является Index(['Energy', 'Water', 'Food'], dtype='object')
Вы можете использовать for loop
, replace()
метод и astype()
метод:-
for x in col:
df[x]=df[x].str.replace('%','').astype(int)
Теперь, если вы наберете df.info()
, это покажет int
Комментарии:
1. По какой-то причине это выглядит как ключевая ошибка: «Энергия» с моей стороны
2. Большое вам спасибо! Он действительно преобразовался в int! Но теперь это дает мне ошибку типа: объект ‘numpy.int64’ не повторяется там, где была предыдущая ошибка типа. Извините, я не знаю, почему это всегда не повторяемая ошибка
3. что вы пытаетесь здесь сделать :-
for n in df_rel:
bcz вашаdf.plot()
работа в порядке4. Да,
df.plot()
все работает нормально.for n in df_rel:
Именно здесь я пытаюсь поместить значения % на горизонтальную диаграмму изdf.plot()
5. ооо..Я не знаю об этом, но вы можете подождать, пока кто-нибудь другой ответит на этот вопрос, или вы можете изменить/обновить свой текущий вопрос, упомянув о своей текущей проблеме….или задать другой вопрос об этом, поскольку вы решили часть преобразования dtype