Python PANDAS-Substring First符号前的INT或FLOAT

时间:2017-08-10 17:23:57

标签: python regex pandas

我在PANDAS数据框中有一个字符串列我希望substring创建一个新列。该列的一般格式为:

"THING 10MG/OTHER THING 100MG"
"THING 10MG"
"THING 10.5MG"
"THING 10.5MCG"

我需要的是正则表达式或其他模式匹配技术来提取这些结果:

"10"
"10"
"10.5"
"10.5"

结果是在MG或MCG之前第一次出现(从左侧)float或int。

到目前为止,我所得到的结果显然不完整:

df['string_field'].str.extract('(\d+)MG')

任何高效的方法或提示将不胜感激。感谢。

2 个答案:

答案 0 :(得分:2)

工作解决方案:

\b(\d+(\.\d+)?)MC?G

\b是一个单词边界。 ?表示它是可选的。这适用于组或角色。

Live demo

答案 1 :(得分:1)

我认为您需要提取floatint,然后在必要时转为float

L = [
"THING 10MG/OTHER THING 100MG",
"7THING 10MG",
"THING 10.5MG",
"THING 10.5MCG"
]

df =pd.DataFrame({'string_field':L})
print (df)
                   string_field
0  THING 10MG/OTHER THING 100MG
1                   7THING 10MG
2                  THING 10.5MG
3                 THING 10.5MCG

print (df['string_field'].str.extract('(\d*\.\d+|\d+)MC?G', expand=False).astype(float))
0    10.0
1    10.0
2    10.5
3    10.5
Name: string_field, dtype: float64