Reh*_*med 3 python regex pandas
我在熊猫的数据框中有一个地址列,其中包含 3 种类型的信息,即街道、殖民地和城市。
有三个值和两个可能的分隔符 - 一个 ',' 或一个空格,例如它可以是Street1,Colony1,City1或Street1 Colony1 City1。
我需要将此列拆分为三个带有各自标签的列'Street','Colony'并相应地拆分此列中'City'的值Address。
执行此操作的最有效方法是什么,因为 pandassplit函数只允许您使用单个分隔符或正则表达式(可能是一个正则表达式,因为我对正则表达式不太擅长)。
如果您确定它是逗号,或空格,您可以使用:
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)
实现此目的的一种方法是使用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)
| 归档时间: |
|
| 查看次数: |
4519 次 |
| 最近记录: |