python - 根据不同长度的分隔符拆分 Pandas 字符串列

标签 python regex python-3.x pandas split

我有一个包含文本字符串的 df.LOCATION 列。每个字符串都包含反射(reflect)起始地址和目的地地址的文本。我的目标是拆分起点和终点,以便我可以创建两个单独的列。

大多数时候,源文本和目标文本由字符串模式“to”分隔,例如“1234 A 街到 9876 B 街”。我用过

map(lambda x: re.split(' to ', x), df.LOCATION) 

这很好用,除了在某些行中我在文本中有更多的“to”,例如 “从 1234 A St. 需要去 9876 B St 取卡车。” - 在这种情况下,我仍然想将起点和终点分成两个字符串,但我上面的代码将返回三个列表,因为我以粗体突出显示了额外的 'to' 字符串。

为了解决这个问题,我实现了

map(lambda x: re.split(' to \d+', x), dfJobs.LOCATION))

这正确地搜索了字符串,其中我不仅有文本“to”,而且还有任何数字表明它后面有一个新地址,即目的地。这是有效的,除了它实际上也会删除目标地址中的那些初始数字,但我想保留它们。

换句话说,我想检测上述模式,并在找到它们时仅根据模式的“to”部分进行拆分。

最佳答案

df = pd.DataFrame(
    {'Location' : ['1234 A St. to 9876 B St.', 
                   'From 1234 A St. to pick up truck to 9876 B St.']})    
df
                                         Location
0                        1234 A St. to 9876 B St.
1  From 1234 A St. to pick up truck to 9876 B St.

您可以使用 r' to\D+' 从“to”开始匹配到第一个数字。要向量化,请使用 str.split

v = df.Location.str.split(r' to\D+', expand=True)
v.columns = ['source', 'destination'] 

df.join(v)
                                         Location           source destination
0                        1234 A St. to 9876 B St.       1234 A St.  9876 B St.
1  From 1234 A St. to pick up truck to 9876 B St.  From 1234 A St.  9876 B St.

关于python - 根据不同长度的分隔符拆分 Pandas 字符串列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53808792/

相关文章:

python - Keras自定义层输入形状兼容性问题

python - Python中有 "do ... until"吗?

python - 使用 'for' 或 'While' 循环调用外部命令

Ruby 相当于 "grep -C 5"以获取匹配项周围的行的上下文?

python - 确定两个值的差异何时达到最小值

python - python中的树状图

regex - 匹配vim寄存器的内容

python - 如何从 regex.findall 的匹配中返回字典列表?

python-3.x - 找不到任何满足 mysql-connector-python 要求的下载

python - Tkinter 中的 if 语句被 else 语句删除