从pandas数据帧过滤时如何进行精确的字符串匹配

Ati*_*ska 4 python pandas

我有一个数据框作为

df

   indx   pids
    A    181718,
    B     31718,
    C      1718, 
    D    1235,3456
    E    890654,
Run Code Online (Sandbox Code Playgroud)

我想返回与 1718 完全匹配的行。

我尝试这样做,但正如预期的那样,它返回 1718 也是子集的行:

group_df = df.loc[df['pids'].astype(str).str.contains('{},'.format(1718)), 'pids']

   indx   pids
    A    181718,
    B     31718,
    C      1718, 
Run Code Online (Sandbox Code Playgroud)

当我尝试做这样的事情时,它返回空:

cham_geom = df.loc[df['pids'] == '1718', 'pids']
Run Code Online (Sandbox Code Playgroud)

预期输出:

 indx   pids
  C      1718, 
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我吗?

ank*_*_91 5

你可以尝试:

df[df.pids.replace('\D','',regex=True).eq('1718')]

  indx   pids
2    C  1718,
Run Code Online (Sandbox Code Playgroud)

'\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
Run Code Online (Sandbox Code Playgroud)

执行:

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)]
Run Code Online (Sandbox Code Playgroud)

给出:

  indx       pids
2    C      1718,
5    F  3220,1718
Run Code Online (Sandbox Code Playgroud)