[英]Splitting a column in a DataFrame based on multiple possible delimiters
我在熊猫的数据框中有一个地址列,其中包含3种信息,即街道,殖民地和城市。
有三个带有两个可能的定界符的值-','或空格,例如可以是Street1,Colony1,City1
或Street1 Colony1 City1
。
我需要将此列分为三个标签分别为'Street'
, 'Colony'
和'City'
,并将'City'
Address
列中的值相应地拆分。
最有效的方法是什么,因为pandas split
函数仅允许您使用单个定界符或regex表达式(也许是regex表达式,因为我对regex不太满意)。
实现此目的的一种方法是使用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']))
)
尝试这个
df[['Street','Colony','City']] = df.address.apply(lambda x: pd.Series(re.split('\W',x)))
\\W
将匹配不是单词字符的任何字符。 查看文件
如果您确信它要么是一个逗号,
或者空格 您可以使用:
df[['Street','Colony','City']] = df.address.str.split('[ ,]', expand=True)
说明: str.split接受pat(模式)参数:字符串或正则表达式作为分割对象。 如果未指定,请在空白处分割。 利用这一事实,我们可以传递正则表达式,这很容易,因为regex中的[ ,]
意味着 或者
,
。
一种替代方法是使用' |,'
或者如果您可以有多个空格'\\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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.