我正在尝试提取文本中嵌入的6位数字。数字始终以零开头,总是6位数字,以第4位后的句点分隔,如下所示:
0 0133.02[text] in location [texttext](text) numbers
1 0121.08[text] in location [texttext](text) numbers
...
我运行以下内容:
import re
filtered = re.findall("0\d\d\d[.]\d\d", str(df['col']))
要解析478行,每行包含所述数字。但是,filtered
结果只输出60,即使我更改了正则表达式格式。有趣的是,filtered
似乎主要由478行的第一行和最后几行的数字组成,但不是来自中间?
编辑: 我提取了那些工作与不工作的行,并发现那些工作的行是第一个&最后30行(0-29,448-477)。
以下是不起作用的行的示例(446,447):
446 0005.00 [CT] in Vancouver [CMA] (B.C.) 44160
447 0170.05 [CT] in Vancouver [CMA] (B.C.) 44006
可行的行样本(448,449):
448 0050.04 [CT] in Vancouver [CMA] (B.C.) 43995
449 0067.01 [CT] in Vancouver [CMA] (B.C.) 43989
答案 0 :(得分:1)
这些是帮助您解决此问题的一些方法。我会删除它,因为它不是答案。
import re
import pandas as pd
data = dict(col=['texttexttext 0036.01 texttext','texttexttext 0006.21 texttext'])
df = pd.DataFrame(data)
re.findall("0\d{3}\.\d{2}", str(df['col'])) #Simplified your regex
有效创建:
['0036.01', '0006.21']
尝试这个怎么样:
re.findall("0\d{3}\.\d{2}",' '.join(df['col'].tolist()))
如果中间行不起作用,请提取样本,例如,并与我们分享:
print('\n'.join(df['col'][200:220].tolist()))