Как сделать ту часть линии, которая мне нужна? - PullRequest
0 голосов
/ 06 января 2019

Мне нужно извлечь из столбца таблицы только часть строки - длиной от 0 до 4 символов:

"адрес": "124"

Я знаю, что это можно сделать как функции «extract» / findall. но получается только установить маску, на которой будут отбиваться только части линии, которые попадут под эту маску. и, как я уже сказал, длина кода отличается, поэтому этот метод не эффективен. Подскажите пожалуйста, как правильно установить маску для выделения.

Пример строки из столбца таблицы:

{'latitude': '37 .80505999961946 ',' human_address ': '{ "Адрес": "0", "город": "Oakland", "состояние": "Са", "молния": ""}', 'needs_recoding': False, 'longitude': '-122.27301999967312'}

df['latitude_1'] = df['Location 1'].str.extract('(\"\d\d\d\d)', expand=True)

Ответы [ 2 ]

0 голосов
/ 06 января 2019

Вы действительно можете использовать pandas str.extract, вам просто нужно настроить шаблон регулярных выражений.

Ниже приводится датафрейм, взятый из @Ananay Mital.

>>> df
                                       human_address           latitude            longitude  needs_recoding
0  {"address":"1234","city":"Oakland","state":"Ca...  37.80505999961946  -122.27301999967312           False
1  {"address":"0","city":"Oakland","state":"Ca","...  37.80505999961946  -122.27301999967312           False

Вот как вы можете использовать str.extract для получения ваших результатов:

>>> df.human_address.str.extract('(\"address\":\"\d{0,4}\")')
                  0
0  "address":"1234"
1     "address":"0"

ИЛИ, как показано ниже.

>>> df.human_address.str.extract(r'("address":"\d{0,4}")')
                  0
0  "address":"1234"
1     "address":"0"
0 голосов
/ 06 января 2019

Надеюсь, это поможет

dic = {'latitude': '37.80505999961946', 'human_address': '{"address":"1234","city":"Oakland","state":"Ca","zip":""}', 'needs_recoding': False, 'longitude': '-122.27301999967312'}, {'latitude': '37.80505999961946', 'human_address': '{"address":"0","city":"Oakland","state":"Ca","zip":""}', 'needs_recoding': False, 'longitude': '-122.27301999967312'}
df = pd.DataFrame(list(dic))
df


          human_address                                   latitude             longitude        needs_recoding
0   {"address":"1234","city":"Oakland","state":"Ca...   37.80505999961946   -122.27301999967312 False
1   {"address":"0","city":"Oakland","state":"Ca","...   37.80505999961946   -122.27301999967312 False


import re
df.human_address.apply(lambda s: re.search('\"address\"*:*\"\d{0,4}\"', s).group())


0    "address":"1234"
1       "address":"0"
Name: human_address, dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...