Разделение и согласование значений в Python - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть этот CSV-файл с очень странным форматом данных. Месяцы разделены в столбцах с 1 и 0 как истина или ложь, а дни работы указаны в одной строке, разделенной запятыми.

Мне нужно изменить тип даты на обычный, например, «день / месяц». «Так что я могу сделать некоторый анализ.

enter image description here

Я пытался использовать панд с методом расплава для разделения столбцов

dfs.melt(id_vars=['ID_INVENTORY','JOBISN','DAYS_JOB'], value_vars=['JAN','FEB','MAR','APR','MAY','JUN','JUL','AUG','SEP','OCT','NOV','DECE'])

послечто я получил этот результат

enter image description here

Но так как у панд нет метода разделения, я действительно не знаю, что с этим делать, но я упалm на правильном пути xD

Пример данных ниже (разделенных ";")

JAN;FEB;MAR;APR;MAY;JUN;JUL;AUG;SEP;OCT;NOV;DECE;DAYS_JOB
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31
1;1;1;1;1;1;1;1;1;1;1;1;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31

1 Ответ

1 голос
/ 05 ноября 2019

Я предполагаю, что 1,2,3,4 .... в столбце 'DAYS_JOB' в строковом формате.

В этом случае мы можем сначала разбить строку по запятой, преобразовать в список изатем используйте функцию pandas explode, чтобы развернуть элемент списка в несколько записей. [ df.explode doc ]

Код будет выглядеть так:

df['DAYS_JOB'] = df['DAYS_JOB'].apply(lambda x: list(x.split(",")))
df = df.explode('DAYS_JOB') 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...