繁体   English   中英

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

[英]Splitting a column in a DataFrame based on multiple possible delimiters

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

有三个带有两个可能的定界符的值-','或空格,例如可以是Street1,Colony1,City1Street1 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM