Построение наборов из Pandas df и Ошибка ввода неэкранируемый тип: «набор»

#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. Обновленный ответ и на этот вопрос… Пожалуйста, взгляните 🙂