如何通过一些规则过滤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
我尝试过滤满足以下条件的行:
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