基于多个可能的分隔符拆分 DataFrame 中的列

Reh*_*med 3 python regex pandas

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

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

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

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

Ant*_*vBR 5

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

df[['Street','Colony','City']] = df.address.str.split('[ ,]', expand=True)
Run Code Online (Sandbox Code Playgroud)

说明: str.split接受一个 pat(模式)参数:要拆分的字符串或正则表达式。如果未指定,则在空白处拆分。使用这样的事实,我们可以通过一个正则表达式这将成为一个简单的任务,因为[ ,]在正则表达式的方式,无论,

另一种方法是使用' |,'或者如果您可以有多个空格'\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)
Run Code Online (Sandbox Code Playgroud)

返回:

  address Street Colony City
0   a,b,c      a      b    c
1   a b c      a      b    c
Run Code Online (Sandbox Code Playgroud)


kat*_*lie 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']))
                )
Run Code Online (Sandbox Code Playgroud)