在数据框中的一列中显示extractall函数的结果

时间:2019-02-01 18:00:57

标签: python pandas dataframe

我正在尝试向数据框中添加新列,并在另一列中添加数字列表。在“街道”一栏中,我不仅获得了街道名称,有时还获得了建筑物和公寓的数量。我想添加该列并检查哪些行包含数字以及它们是什么特定数字。

我在数据框中有这样一列:

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实例,找到了浮点数”,“发生在索引(0,1)上”)

,我想收到这样的一列:

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

包含street_name列中出现的所有数字

2 个答案:

答案 0 :(得分:1)

为此使用n = int(input()) l = list() i = 0 for j in range(1,n+1): if j == 0: l.append(j) elif j % 2 == 0: l.insert(0, j) else: l.append(j) print(l)

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)

答案 1 :(得分:0)

您可以使用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