提取分隔符熊猫之间的值

时间:2020-07-23 09:57:31

标签: python python-3.x regex pandas

我有一个DF,其中的一列带有这样的字符串:eth 2/2206/114/1/20 我需要提取每个值,因为我使用的是正则表达式。对于第一个值,我使用:

r'eth(.*?)/'提取eth/之间的第一个值

r'/(.*?)/'提取值2206

但是,如何提取下一个值?我需要忽略第一个定界符“ /”,是否有必要忽略第一个定界符以提取两个下一个斜杠之间的值114或如何获得此输出?

2 个答案:

答案 0 :(得分:1)

一种解决方案:

df = pd.DataFrame([{"my_col": "eth 2/2206/114/1/20"}])
# remove the 'eth' part and save it in an other column
df['my_col_copy'] = df['my_col'].str.extract(r'eth (.*)')
# split in multiple columns
df[['val1', 'val2', 'val3', 'val4', 'val5']] = df['my_col_copy'].str.split('/', expand=True)

输出:

my_col               my_col_copy        val1  val2  val3   val4  val5
eth 2/2206/114/1/20  2/2206/114/1/20    2     2206  114    1     20

答案 1 :(得分:0)

由于未指定,因此我假设要提取的值的数量是可变的。

考虑到这一点,我想说正则表达式不是解决您问题的最有效工具,因为(1)要匹配的模式不是很复杂,并且(2)值的数量可变,这是要高效地提取它们非常困难-甚至不是不可能。

提取这些值的更简单方法是在字符串上使用字符串split()方法(使用startswith()进行附加验证,以确保确实存在eth偏好)。拼接的字符串,以防止'eth'脱离拆分。这是一个代码段作为示例:

column = 'eth 2/2206/114/1/20'  # Or any other valid values

if column.startswith('eth '):
    values = column[4:].split('/')
else:
    values = None  # Here, manage the invalid case how you prefer

print(values)

结果:

['2', '2206', '114', '1', '20']