如何使用 Pandas 计算子字符串(前三个索引)的出现次数?
How to count the occurences of a substring (first three indexes) using Pandas?
我正在尝试计算我的 csv 文件中有多少个 phone 数字以三个不同的列中的数字“123”、“456”和“789”开头。
我最初是用 RegEx 来解决这个问题的:
num_list = ['123', '456', '789']
rgx = '({})'.format('|'.join(num_list))
df['Series1'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
df['Series2'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
df['Series3'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
但是,这种方法的问题是,我觉得它会查找这些数字,而不管它在字符串中的位置如何。我只对计算以这些子字符串中的任何一个开头的那些感兴趣。
您可以使用str.startswith( tuple(num_list) )
import pandas as pd
data = {
'A': [
'123-000-000',
'456-000-000',
'789-000-000',
'000-123-000',
'000-456-000',
'000-789-000',
'000-000-123',
'000-000-456',
'000-000-789',
],
}
df = pd.DataFrame(data)
#print(df)
num_list = ['123', '456', '789']
selected = df[ df['A'].str.startswith( tuple(num_list) ) ]
print(selected)
counts = df['A'].str.startswith( tuple(num_list) ).value_counts()
print('count True :', counts[True])
print('count False:', counts[False])
结果
A
0 123-000-000
1 456-000-000
2 789-000-000
count True : 3
count False: 6
如果你想使用正则表达式,那么你应该添加 ^
有^(123|456|789)
rgx = '^({})'.format('|'.join(num_list))
或(^123|^456|^789)
rgx = '(^{})'.format('|^'.join(num_list
我正在尝试计算我的 csv 文件中有多少个 phone 数字以三个不同的列中的数字“123”、“456”和“789”开头。
我最初是用 RegEx 来解决这个问题的:
num_list = ['123', '456', '789']
rgx = '({})'.format('|'.join(num_list))
df['Series1'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
df['Series2'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
df['Series3'].str.lower().str.extractall(rgx).iloc[:, 0].value_counts()
但是,这种方法的问题是,我觉得它会查找这些数字,而不管它在字符串中的位置如何。我只对计算以这些子字符串中的任何一个开头的那些感兴趣。
您可以使用str.startswith( tuple(num_list) )
import pandas as pd
data = {
'A': [
'123-000-000',
'456-000-000',
'789-000-000',
'000-123-000',
'000-456-000',
'000-789-000',
'000-000-123',
'000-000-456',
'000-000-789',
],
}
df = pd.DataFrame(data)
#print(df)
num_list = ['123', '456', '789']
selected = df[ df['A'].str.startswith( tuple(num_list) ) ]
print(selected)
counts = df['A'].str.startswith( tuple(num_list) ).value_counts()
print('count True :', counts[True])
print('count False:', counts[False])
结果
A
0 123-000-000
1 456-000-000
2 789-000-000
count True : 3
count False: 6
如果你想使用正则表达式,那么你应该添加 ^
有^(123|456|789)
rgx = '^({})'.format('|'.join(num_list))
或(^123|^456|^789)
rgx = '(^{})'.format('|^'.join(num_list