簡體   English   中英

從熊貓數據框過濾時如何進行精確的字符串匹配

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM