我在熊猫的数据框中有一个地址栏,其中包含3种信息,即街道,殖民地和城市。
具有三个可能的定界符的三个值-','或空格,例如可以为Street1,Colony1,City1
或Street1 Colony1 City1
。
我需要将此列分为三个标签分别为'Street'
,'Colony'
和'City'
,并将该Address
列中的值相应地拆分。
最有效的方法是什么,因为pandas split
函数仅允许您使用单个定界符或regex表达式(也许是regex表达式,因为我对regex不太满意)。
答案 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