<p>虽然已经给出了正则表达式,但在熊猫专栏中回答您的评论</p>
<h2>文章中的示例数据集:</h2>
<pre><code>>>> df1
pattern
0 187019980
1 920204
2 dong998
3 diao511001
4 a2805938
5 YUEH008
6 752099429
7 469919209
8 majunsui
9 sishenD2
10 woaini123
11 guswjddl
12 342423198706
13 zj87755202
14 mxt19950626
15 1985625
16 theend0512
17 jzm5583385
18 1981122
19 30061984
</code></pre>
<p>将regex应用于pandas列ie<code>pattern</code>这里,您可以使用下面的语法,该语法基本上返回如下所示的列表对象</p>
<pre><code>>>> df1['pattern'].str.findall(r'(?<!\d)\d{4}(?!\d)')
0 []
1 []
2 []
3 []
4 []
5 []
6 []
7 []
8 []
9 []
10 []
11 []
12 []
13 []
14 []
15 []
16 [0512] < this is your matched pattern
17 []
18 []
19 []
Name: pattern, dtype: object
</code></pre>
<p>因此,您可以将这些空列表对象转换为字符串,该字符串将成为<code>NaN</code>,然后删除所有这些对象,因为您只需要匹配值</p>
<pre><code>>>> df1['pattern'].str.findall(r'(?<!\d)\d{4}(?!\d)').str[0].dropna()
# df1['pattern'].str.extract(r'((?<!\d)+\d{4})+(?!\d)').dropna()
16 0512
</code></pre>
<h2>在文章的最后一部分采用更好的方法:</h2>
<p>为了获得更好的解决方案,您需要导入<code>re</code>模块来使用您的方法,这不是必需的,您只需按如下方式操作即可。虽然选择是你的:-)</p>
<pre><code>>>> df1['pins'] = df1['pattern'].str.findall(r'(?<!\d)\d{4}(?!\d)')
>>> df1[df1['pins'].apply(lambda x: len(x)) > 0]
pattern pins
16 theend0512 [0512]
</code></pre>