Дубликаты столбцов из Pandas get_dummies

#python #pandas

#pandas

Вопрос:

Взят набор данных, подобный следующему (вывод из df.head() )

 individual  states
1           Alaska, Hawaii 
2           Hawaii, Alaska
3           Kansas, Iowa, Maryland
4           New Jersey, Newada
5           Newada, New Jersey
  

Если я запущу

 df['states'].str.get_dummies(sep=',')
  

Я получаю следующее

     Hawaii  Iowa    Maryland    New Jersey  Newada  Alaska  Hawaii  Kansas  New Jersey  Newada
0   1   0   0   0   0   1   0   0   0   0
1   0   0   0   0   0   1   1   0   0   0
2   0   1   1   0   0   0   0   1   0   0
3   0   0   0   0   1   0   0   0   1   0
4   0   0   0   1   0   0   0   0   0   1
  

Обратите внимание на повторяющиеся (повторяющиеся) столбцы. Значения различаются для нескольких вхождений столбцов, поэтому я не могу просто отбросить их. Откуда берется проблема, как мне сделать это правильно? Заранее спасибо!

Ответ №1:

Проблема в разделителе, нужно ', ' , иначе получите имена некоторых столбцов с пробелами, которые отличаются от без, поэтому создаются новые столбцы:

 df1 = df['states'].str.get_dummies(sep=',')

print (df1.columns)
Index([' Alaska', ' Hawaii', ' Iowa', ' Maryland', ' New Jersey', ' Newada',
       'Alaska', 'Hawaii', 'Kansas', 'New Jersey', 'Newada'],
      dtype='object')
  

 print (df1)
    Alaska   Hawaii   Iowa   Maryland   New Jersey   Newada  Alaska  Hawaii  
0        0        1      0          0            0        0       1       0   
1        1        0      0          0            0        0       0       1   
2        0        0      1          1            0        0       0       0   
3        0        0      0          0            0        1       0       0   
4        0        0      0          0            1        0       0       0   

   Kansas  New Jersey  Newada  
0       0           0       0  
1       0           0       0  
2       1           0       0  
3       0           1       0  
4       0           0       1  
  

 df2 = df['states'].str.get_dummies(sep=', ')
print (df2)
   Alaska  Hawaii  Iowa  Kansas  Maryland  New Jersey  Newada
0       1       1     0       0         0           0       0
1       1       1     0       0         0           0       0
2       0       0     1       1         1           0       0
3       0       0     0       0         0           1       1
4       0       0     0       0         0           1       1
  

Комментарии:

1. Вот и все, спасибо! Однако я использовал .str.replace(» «,»»), чтобы удалить пробелы вместо того, чтобы помещать пробелы в разделитель