如何在我的 pandas 列中找到连续的重复数字?
How do I find consecutive repeating numbers in my pandas column?
我有两列,一列包含一串数字,一列包含两位或三位数字,如下所示:
Account number
0 5493455646944
1 56998884221
2 95853255555926
3 5055555555495718323
4 56999998247361
5 6506569568
我想创建一个正则表达式函数,如果帐号包含 5 个或更多的连续重复数字,它会显示一个标志。
所以理论上目标状态如下:
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
我在想:
def reg_finder(x):
return re.findall('^([0-9]){5,}$', x)
我不太会用正则表达式,所以不确定...谢谢
编辑:这是我试过的:
def reg_finder(x):
return re.findall('\b(\d)+\b', x)
example_df['test'] = example_df['Account number'].apply(reg_finder)
Account number test
0 5493455646944 []
1 56998884221 []
2 95853255555926 []
3 5055555555495718323 []
4 56999998247361 []
5 6506569568 []
您可以使用
import pandas as pd
import warnings
warnings.filterwarnings("ignore", message="This pattern has match groups")
df = pd.DataFrame({'Account number':["5493455646944","56998884221","95853255555926","5055555555495718323","56999998247361","6506569568"]})
df['test'] = "No"
df.loc[df["Account number"].str.contains(r'([0-9]){4,}'), 'test'] = "Yes"
输出:
>>> df
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
请注意,r'([0-9]){4,}'
正则表达式是使用原始字符串文字定义的,其中反斜杠被解析为文字反斜杠,而不是字符串转义序列辅助字符。
你的正则表达式有问题re.findall('^([0-9]){5,}$', x)
:
- 你用
^
和$
是用来匹配整个字符串是连续的
- 你要匹配多5个,
</code>已经匹配了,你只需要再多4个</li>
</ol>
<p>您可以使用</p>
<pre><code>df['test'] = np.where(df['Account number'].astype(str).str.contains(r'([0-9]){4,}'), 'Yes', 'No')
# Or
df['test'] = np.where(df['Account number'].astype(str).str.contains(r'(\d){4,}'), 'Yes', 'No')
print(df)
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
我有两列,一列包含一串数字,一列包含两位或三位数字,如下所示:
Account number
0 5493455646944
1 56998884221
2 95853255555926
3 5055555555495718323
4 56999998247361
5 6506569568
我想创建一个正则表达式函数,如果帐号包含 5 个或更多的连续重复数字,它会显示一个标志。
所以理论上目标状态如下:
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
我在想:
def reg_finder(x):
return re.findall('^([0-9]){5,}$', x)
我不太会用正则表达式,所以不确定...谢谢
编辑:这是我试过的:
def reg_finder(x):
return re.findall('\b(\d)+\b', x)
example_df['test'] = example_df['Account number'].apply(reg_finder)
Account number test
0 5493455646944 []
1 56998884221 []
2 95853255555926 []
3 5055555555495718323 []
4 56999998247361 []
5 6506569568 []
您可以使用
import pandas as pd
import warnings
warnings.filterwarnings("ignore", message="This pattern has match groups")
df = pd.DataFrame({'Account number':["5493455646944","56998884221","95853255555926","5055555555495718323","56999998247361","6506569568"]})
df['test'] = "No"
df.loc[df["Account number"].str.contains(r'([0-9]){4,}'), 'test'] = "Yes"
输出:
>>> df
Account number test
0 5493455646944 No
1 56998884221 No
2 95853255555926 Yes
3 5055555555495718323 Yes
4 56999998247361 Yes
5 6506569568 No
请注意,r'([0-9]){4,}'
正则表达式是使用原始字符串文字定义的,其中反斜杠被解析为文字反斜杠,而不是字符串转义序列辅助字符。
你的正则表达式有问题re.findall('^([0-9]){5,}$', x)
:
- 你用
^
和$
是用来匹配整个字符串是连续的 - 你要匹配多5个,
</code>已经匹配了,你只需要再多4个</li> </ol> <p>您可以使用</p> <pre><code>df['test'] = np.where(df['Account number'].astype(str).str.contains(r'([0-9]){4,}'), 'Yes', 'No') # Or df['test'] = np.where(df['Account number'].astype(str).str.contains(r'(\d){4,}'), 'Yes', 'No')
print(df) Account number test 0 5493455646944 No 1 56998884221 No 2 95853255555926 Yes 3 5055555555495718323 Yes 4 56999998247361 Yes 5 6506569568 No