[英]How to do exact string match while filtering from pandas dataframe
我有一个数据框
DF
indx pids
A 181718,
B 31718,
C 1718,
D 1235,3456
E 890654,
我想返回与1718完全匹配的行。
我尝试这样做,但正如预期的那样,它也返回1718也是子集的行:
group_df = df.loc[df['pids'].astype(str).str.contains('{},'.format(1718)), 'pids']
indx pids
A 181718,
B 31718,
C 1718,
当我尝试做这样的事情时,它返回空:
cham_geom = df.loc[df['pids'] == '1718', 'pids']
预期产量:
indx pids
C 1718,
有人可以帮我吗?
您可以尝试:
df[df.pids.replace('\D','',regex=True).eq('1718')]
indx pids
2 C 1718,
'\\ D':不是从0到9的数字的任何字符。
编辑考虑以下df:
indx pids
0 A 181718,
1 B 31718,
2 C 1718,
3 D 1235,3456
4 E 890654,
5 F 3220,1718
执行:
df[df.pids.str.split(",").apply(lambda x: '1718' in x)]
#if not comma only:-> df[df.pids.str.split("\D").apply(lambda x: '1718' in x)]
得到:
indx pids
2 C 1718,
5 F 3220,1718
有一个方法isin
,该方法匹配并返回一个数据帧,其中包含True表示匹配,而false表示不匹配。
考虑以下示例
>>> found = df.isin(["1718"])==True
>>> df[found].head(3)
这将显示与1718匹配的前三个值
使用str.contains
带有负数的str.contains
,以确保在'1718'
之前没有其他数字
import pandas as pd
d = {'indx': {0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G'},
'pids': {0: '181718,', 1: '31718,', 2: '1718,', 3: '1235,3456', 4: '890654,', 5: '1231,1718', 6: '1231, 1718'}}
df = pd.DataFrame(d)
df.loc[df.pids.str.contains('(?<![0-9])1718')]
indx pids
2 C 1718,
5 F 1231,1718
6 G 1231, 1718
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.