Pandas просит меня сделать столбец строкой, но я не могу - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь преобразовать столбец pandas в строку, чтобы использовать str.extract().

Когда я запускаю print(data.dtypes), я вижу следующее:

:Address Line 1:         object
:City:                   object
Address Line 2:          object
Case Initiation Date:    object
Case Number:             object
Case Status:             object
Defendants               object
Demand Amount:           object
Motion Status            object
Zip:                     object
6                        object
dtype: object

Я пытаюсь разделить переменную data['Motion Status'] с помощью регулярного выражения, но сталкиваюсь с препятствиями. Во-первых, вот быстрый взгляд на data['Motion Status']:

0    b'01/31/202008:30155'
1    b'02/03/202008:30155'
2    b'02/03/202008:30155'
3    b'02/04/202008:30155'
4    b'02/04/202008:30155'
Name: Motion Status, dtype: object

Вы заметите, что он имеет формат дд / мм / гггг + чч: мм + 3-ди git число. Это код, который я использовал, чтобы попытаться разобрать дату по времени (я сделаю '155' после того, как у меня получится):

data['Motion Status (date)'] = data['Motion Status'].str.extract('\d{2}\/\d{2}\/\d{4}', expand=True)

Когда я запускаю его, он возвращает ошибку TypeError: Cannot use .str.extract with values of inferred dtype 'bytes'. Я перепробовал четыре разных решения, но ни одно из них не сработало (при повторном запуске строки str.extract возвращается то же сообщение об ошибке, что и выше):

data['Motion Status'] = data['Motion Status'].astype('|S')

data['Motion Status'] = data['Motion Status'].astype('str')

data['Motion Status'] = data['Motion Status'].astype(str)

data.astype(str)['Motion Status'].map(lambda x: type(x))

Может кто-нибудь помочь мне здесь? Я действительно не намерен преобразовывать эту переменную в строку. Я просто хочу иметь возможность разобрать дату, время и «155» в конце (кстати, это не всегда «155» - только в первых 20 строках или около того).

Буду признателен за любую помощь!

Обновление:

Теперь я могу запустить эту строку кода data['Motion Status (date)'], data['Time'], data['Other'] = data['Motion Status'].str.extract('(\d{2})/(\d{2})/(\d{4})', expand=True), и она выполняется без ошибок. Честно говоря, я не знаю, что я сделал, чтобы запустить этот прогон ... Однако теперь я столкнулся с немного другой проблемой, когда код создает три новые переменные, но они заполнены нулями, единицами или двойками во всех строках ( а не части строки данных ['Motion Status'], которые я надеялся получить. Например:

   Motion Status (date)  Time  Other
0                     0     1      2
1                     0     1      2
2                     0     1      2
3                     0     1      2
4                     0     1      2

Так что я не совсем вернулся к исходной точке, но мне все еще не удалось способен анализировать различные части строки.

1 Ответ

0 голосов
/ 23 января 2020

У вас есть байты в столбце. decode сначала, используя str.decode метод:

s

#0    b'02/03/202008:30155'
#1    b'02/03/202008:30155'
#2    b'02/04/202008:30155'
#3    b'02/04/202008:30155'
#dtype: object

s.str.decode('UTF-8').str.extract('(\d{2})/(\d{2})/(\d{4})', expand=True)

#    0   1     2
#0  02  03  2020
#1  02  03  2020
#2  02  04  2020
#3  02  04  2020
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...