【发布时间】:2019-08-28 07:34:04
【问题描述】:
以下是我的数据框的样子
mydf =
col1 Col2 Col3 Col4
0 val1 1x \n\t\t\t\t\t\t3x\n\t\t\t\t\t Calculate
1 val2 1x \n\t\t\t\t\t\t3x\n\t\t\t\t\t Calculate
2 val3 1x \n\t\t\t\t\t\t12.5x\n\t\t\t\t\t Calculated
3 val4 1x \n\t\t\t\t\t\t8x\n\t\t\t\t\t Calculated
4 val5 1x \n\t\t\t\t\t\t10x\n\t\t\t\t\t Calculate
5 val18 1x \n\t\t\t\t\t\t6.3x\n\t\t\t\t\t Calculate
从 Col4 中,我想提取数字(包括小数位。
但是,正则表达式模式不适合我。
mydf[Col4].str.extract('[1-9]\d*(\.\d+)?') <br>
对于大多数行,它返回NaN,对于带有小数的行,它返回.5/.3(即,只是十进制值)
我已经尝试使用 re.search 来检查我的模式并且它有效。
newstr = mydf[col4][5]
re.search('[1-9]\d*(\.\d+)?', newstr)
newstr 变为 - '\n\t\t\t\t\t\t12.5x\n\t\t\t\t\t' (双反斜杠)。 以上返回
re.Match object; span=(14, 18), match='12.5'</b>
正如预期的那样。
看起来我遗漏了一些明显的东西。
【问题讨论】:
-
您的数据框中有这些中断 (
<br>)?我们可以删除它们吗? -
从 df 中删除了它们
-
您的正则表达式与
extract完全兼容。它提取exclusively the capture group(\.\d+)?。你应该修改这个正则表达式。
标签: python regex pandas dataframe