我有一个DF,其中的一列带有这样的字符串:eth 2/2206/114/1/20 我需要提取每个值,因为我使用的是正则表达式。对于第一个值,我使用:
r'eth(.*?)/'
提取eth
和/
之间的第一个值
r'/(.*?)/'
提取值2206
但是,如何提取下一个值?我需要忽略第一个定界符“ /”,是否有必要忽略第一个定界符以提取两个下一个斜杠之间的值114或如何获得此输出?
答案 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']