如何通过一些规则过滤table Pandas?

How to filter table Pandas by some rules?

我尝试过滤满足以下条件的行:

dataset = dataset[~dataset.duplicated(subset=['NUM'])]
dataset = [~dataset['NUM'].isin(invalidatedNumsDb)]
dataset = [dataset['NUM'].apply(checkNumber)]
dataset = [dataset['AGE'].apply(isAgeOld)]
dataset = [dataset['EMAIL'].apply(isEmail)]

数据为:

NUM AGE EMAIL
1   18  POPV@GMAIL.COM
2   N   APA@GMAIL.COM
3   20   APAR@GMAIL.COM

因此我想获得前一个 table 行:

3   20   APAR@GMAIL.COM

因为 20 是 isAgeOld APAR@GMAIL.COM 适用于 isEmail 3 对于 checkNumber 是正确的并且 3 没有出现在集合 invalidatedNumsDb.

问题是如果 [~dataset['NUM'].isin(invalidatedNumsDb)] returns true 它包含结果:

[0    False
 Name: NUM, dtype: bool]

那么下一条规则就失败了:

dataset = [dataset['NUM'].apply(checkNumber)]

invalidatedNumsDb = {1,2}

def checkNumber(v):
  v < 100

def isAgeOld(v):
   return v > 18

def isEmail(v):
   return True

将您的 checkNumber 函数更改为实际 return 值。然后将您的条件应用于您的数据集:

def checkNumber(v):
  return v < 100

m1 = ~dataset.duplicated("NUM")
m2 = ~dataset['NUM'].isin(invalidatedNumsDb)
m3 = dataset['NUM'].apply(checkNumber)
m4 = pd.to_numeric(dataset['AGE'],errors='coerce').apply(isAgeOld)
m5 = dataset['EMAIL'].apply(isEmail)

output = dataset[m1&m2&m3&m4&m5]

>>> output 
   NUM AGE           EMAIL
2    3  20  APAR@GMAIL.COM