Преобразовать вложенный список в фрейм данных, с 0, если значение отсутствует - PullRequest
0 голосов
/ 18 февраля 2020

Я хочу преобразовать: [['S1', 'S2', 'S6'], ['S1', 'S2', 'S3', 'S4', 'S5'], ['S1', 'S2', 'S5'], ['S1', 'S2', 'S4', 'S5']] в DataFrame с метками 'S1','S2','S3','S4','S5', 'S6' и, если значение не содержится, то его следует заменить на 0 в противном случае 1.

 'S1','S2','S3','S4','S5','S6'
1 |  1     1   0    0     0    1
2 | 1     1   1   1     1     0 
3 | 1     1   0   0     1     0
4 | 1     1   0   1     1     0   

Эта команда не достаточно хорошо:

data = pd.DataFrame(res, columns = ['S1','S2','S3','S4','S5']) 

     S1  S2  S3    S4    S5
0    S1  S2  S6  None  None
1    S1  S2  S3    S4    S5
2    S1  S2  S5  None  None
3    S1  S2  S4    S5  None
4    S1  S2  S4    S5  None

1 Ответ

0 голосов
/ 18 февраля 2020

Сначала преобразуйте из списков ['S1', 'S2', 'S6'] в диктовку {'S1': 1, 'S2': 1, 'S6': 1}. Из этого мы можем построить фрейм данных, и Pandas правильно расставит все по местам. Любым пропущенным значениям будет присвоен NaN (а для их столбцов будет установлен тип d float). Чтобы противостоять этому, мы заполним недостающие значения нулями, а затем преобразуем все обратно в целые. Итак, если предположить, что ваши данные находятся в data:

pd.DataFrame([{k:1 for k in l} for l in data]).fillna(0).astype(int)

РЕДАКТИРОВАТЬ: если вам не нравится, что ваши столбцы расположены в случайном порядке, вы можете передать аргумент ключевого слова columns, как вы это сделали в твоей попытке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...