根据多个可能的分隔符在DataFrame中拆分列

时间:2018-10-13 15:02:17

标签: python regex pandas

我在熊猫的数据框中有一个地址栏,其中包含3种信息,即街道,殖民地和城市。

具有三个可能的定界符的三个值-','或空格,例如可以为Street1,Colony1,City1Street1 Colony1 City1

我需要将此列分为三个标签分别为'Street''Colony''City',并将该Address列中的值相应地拆分。

最有效的方法是什么,因为pandas split函数仅允许您使用单个定界符或regex表达式(也许是regex表达式,因为我对regex不太满意)。

3 个答案:

答案 0 :(得分: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']))
                )

答案 1 :(得分:2)

尝试一下

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

\W将匹配不是单词字符的任何字符。参见docs

答案 2 :(得分:2)

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

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

说明:str.split接受pat(模式)参数:String或正则表达式进行分割。如果未指定,请在空白处分割。利用这一事实,我们可以传递正则表达式,这很容易,因为正则表达式中的[ ,]意味着,

一种替代方法是使用' |,',或者如果您可以有多个空白'\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