【发布时间】:2021-03-06 22:25:53
【问题描述】:
我昨天问了一个类似的问题Keep elements with pattern in pandas series without converting them to list,现在我面临着相反的问题。
我有一个熊猫数据框:
import pandas as pd
df = pd.DataFrame(["Air type:1, Space kind:2, water, wood", "berries, something at the start:4, Space blu:3, somethingelse"], columns = ['A'])
我想挑选所有没有“:”的元素。 我尝试的是以下似乎正在工作的正则表达式:
df['new'] = df.A.str.findall('(^|\s)([^:,]+)(,|$)')
A new
0 Air type:1, Space kind:2, water, wood [( , water, ,), ( , wood, )]
1 berries, something at the start:4, Space blu:3, somethingelse [(, berries, ,), ( , somethingelse, )]
如果我理解正确,findall 搜索了 3 种模式(括号中的模式)并返回了在列表中包含的元组中可以找到的尽可能多的模式。 有没有办法避免这种情况,只返回中间模式? 如第一排:水,木头 第二行:浆果,其他的东西
我也尝试了相反的方法:
df.A.str.replace('[^\s,][^:,]+:[^:,]+', '').str.replace('\s*,', '')
这似乎与我想要的很接近(仅缺少模式之间的逗号),但我想知道我是否遗漏了一些能让我的生活更轻松的东西。
【问题讨论】:
-
试试这个:
df.A.str.findall(r'(?:^|,)([^:,]+)(?=,|$)')