#python #pandas #plot #seaborn #typeerror
Вопрос:
У меня есть фрейм данных со столбцом наборов:
df = pd.DataFrame([['Alex',{33, 34}],['Bob',{33}],['Clarke',{33, 34}]], columns = ['names', 'indicators']).
Я хотел бы построить график частоты значений в df [«индикаторы»], чтобы понять, какие комбинации индикаторов имеют место. Т. Е. Здесь я хотел бы, чтобы график, на котором {33, 34} отображается дважды и {33} отображается один раз. Если бы сиборн был sb, я бы обычно сделал гистограмму:
sb.countplot(data = df, x = 'indicators')
Но я получаю ошибку типа: неэшируемый тип: «установить», когда я пытаюсь это сделать. Я пытался преобразовать аргументы из наборов в списки или np.array() безрезультатно.
Ответ №1:
import seaborn as sns
попробуйте через astype()
:
sns.countplot(data = df.astype({'indicators':'str'}), x = 'indicators')
#the 'indicators' column in you real dataset won't change
или
df['indicators']=df['indicators'].astype(str)
#Finally:
sns.countplot(data = df, x = 'indicators')
#For making back the the 'indicators' column back to set you can use:
df['indicators']=df['indicators'].str.strip('{}').str.split(',').map(set)
выход:
Комментарии:
1. Это не совсем то, чего я хочу. Я пытаюсь увидеть, какие индикаторы отображаются друг с другом, поэтому мне нужен график, который показывает, что {33, 34} имеет частоту 2, а {33} имеет частоту 1. Вы показали, что {33} имеет частоту 3, а {34} имеет частоту 2.
2. @shaha обновил ответ… Пожалуйста, взгляните 🙂
3. Спасибо. 🙂 Это то, что я тоже понял на данный момент. Я бы предпочел не превращать все в строки, так как это менее изменчиво, хотя это работает! На данный момент я поддержал ваш комментарий, и если никто другой не сможет дать прямой ответ в ближайшие несколько часов, я приму его.
4. Обновленный ответ и на этот вопрос… Пожалуйста, взгляните 🙂