4

我在 pandas 的数据框中有一个地址列,其中包含 3 种类型的信息,即街道、殖民地和城市。

三个值带有两个可能的分隔符 - ',' 或空格,例如它可以是Street1,Colony1,City1Street1 Colony1 City1

我需要将此列拆分为三个带有各自标签的列'Street''Colony'并相应地拆分此列'City'中的值Address

什么是最有效的方法,因为 pandassplit函数只允许您使用单个分隔符或正则表达式(可能是正则表达式,因为我不太擅长正则表达式)。

4

3 回答 3

5

如果您确定它是逗号,或空格,您可以使用:

df[['Street','Colony','City']] = df.address.str.split('[ ,]', expand=True)

说明: str.split接受一个 pat(模式)参数:字符串或正则表达式进行拆分。如果未指定,则在空格处拆分。使用我们可以传递正则表达式的事实,这变得很容易,因为[ ,]在正则表达式中意味着or ,

另一种方法是使用' |,',或者如果你可以有多个空格'\s+|,'


完整示例:

import pandas as pd

df = pd.DataFrame({
    'address': ['a,b,c','a b c']
})

df[['Street','Colony','City']] = df.address.str.split('[ ,]', expand=True)

print(df)

回报:

  address Street Colony City
0   a,b,c      a      b    c
1   a b c      a      b    c
于 2018-10-14T21:06:58.627 回答
3

尝试这个

df[['Street','Colony','City']] = df.address.apply(lambda x: pd.Series(re.split('\W',x)))

\W将匹配任何不是单词字符的字符。查看文档

于 2018-10-14T12:54:30.733 回答
2

实现此目的的一种方法是使用re.sub来合并您的分隔符,然后str.split在该单个分隔符上使用来创建新列。

import pandas as pd 
import re

df = pd.DataFrame({'address':['Street1,Colony1,City1',  'Street2 Colony2 City2']})

location_df = (df.address
                 .apply(lambda x: pd.Series(re.sub(pattern=' |,', 
                                                   repl=',', 
                                                   string=x).split(','), 
                                            index=['street','colony','city']))
                )
于 2018-10-13T21:02:14.307 回答