показать результаты из функции extractall в одном столбце в кадре данных - PullRequest
0 голосов
/ 01 февраля 2019

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

У меня есть один столбец во фрейме данных, например:

street_name
===========
Maine 70 , 50
Oak 2/52
Seventh 2
Sixth

Теперь мой код:

street_df=pd.read_csv('street.csv',encoding='windows-1250',error_bad_lines=False,delimiter=';')
street_df['street_rep']=street_df.iloc[:,0].str.replace(',','/')
street_df['street_rep1']=street_df.iloc[:,1].str.replace('/','')
street_df['street_num']=street_df.iloc[:,2].str.extractall('(\d+)').astype(str).unstack().apply(','.join)

Теперь мой вывод:

TypeError: ('элемент последовательности 1: ожидаемый экземпляр str, найден float', 'произошел в индексе (0, 1)')

и я хотел бы получить один столбец, подобный этому:

all_numbers:
============
70,50
2,52
2

со всеми числами, которые произошли в столбце street_name

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Вы можете использовать str.find_all:

In [11]: df.street_address.str.findall('\d+')
Out[11]:
0    [70, 50]
1     [2, 52]
2         [2]
3          []
Name: street_address, dtype: object

и, если вам это нужно, в виде строки через запятую:

In [12]: df.street_address.str.findall('\d+').apply(','.join)
Out[12]:
0    70,50
1     2,52
2        2
3
Name: street_address, dtype: object
0 голосов
/ 01 февраля 2019

Используйте regex для этого:

import pandas as pd 
import re
df = pd.DataFrame({'street': ['Maine 70 , 50','Oak 2/52','Seventh 2','Sixth']})

def find_num(x):
    j = re.findall(r'[0-9]+', x)
    return ",".join(j)

df['all numbers'] = df['street'].apply(find_num)

print(df)

Вывод:

          street      all numbers                                                                                                                   
0  Maine 70 , 50       70,50                                                                                                                   
1       Oak 2/52        2,52                                                                                                                   
2      Seventh 2           2                                                                                                                   
3          Sixth          
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...