Python 验证数据帧单元

Python 验证数据帧单元,python,regex,validation,pandas,Python,Regex,Validation,Pandas,我有一个非索引数据帧(从csv文件读取),如下所示: John Mullen 12/08/1993 Passw0rd Lisa Bush 06/12/1990 myPass12 Maria Murphy 30/03/1989 qwErTyUi Seth Black 21/06/1991 LoveXmas 我想根据特定的正则表达式验证每行的每个单元格: 验证出生日期为dd/mm/yyyy 使用下面的PassRegex验证密码 使用NameRegex验证名/姓

我有一个非索引数据帧(从csv文件读取),如下所示:

John   Mullen  12/08/1993  Passw0rd
Lisa   Bush    06/12/1990  myPass12
Maria  Murphy  30/03/1989  qwErTyUi
Seth   Black   21/06/1991  LoveXmas
我想根据特定的正则表达式验证每行的每个单元格:

  • 验证出生日期为
    dd/mm/yyyy
  • 使用下面的PassRegex验证密码
  • 使用NameRegex验证名/姓
  • 下面将名字中的“替换为”_
  • 等等
然后将任何单元格未验证的行移动到新的数据帧

import re
PassRegex = re.compile(r"^(?!.*\s)(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,50}$")
NameRegex = re.compile(r"^[a-zA-Z0-9\s\-]{2,80}$")
有没有一种方法可以做到这一点,而不必逐行、逐单元格地遍历整个数据帧

非常感谢您的帮助

有没有一种方法可以在不遍历整个数据的情况下做到这一点 一行一行,一个单元格一个单元格

您不必查看每一行中的每个值,但很明显,在每一行中,您必须查看与筛选器/条件相关的列

from pandas import DataFrame
from dateutil.parser import parse

df = DataFrame([['John', 'Mullen', '12/08/1993',  'Passw0rd'],
... ['Lisa',   'Bush' ,   '06/12/1990',  'myPass12'],
... ['Maria' , 'Murphy',  '30/03/1989',  'qwErTyUi'],
... ['Seth' ,  'Black' ,  '21/06/1991' , 'LoveXmas']])

df.columns = ['name1','name2','date','pwd']

# convert date column to datetime type
df.date = df.date.apply(parse)

>>> df[df.date > parse('1/1/91')]
  name1   name2       date       pwd
0  John  Mullen 1993-12-08  Passw0rd
3  Seth   Black 1991-06-21  LoveXmas

>>> df[df.date <= parse('1/1/91')]
   name1   name2       date       pwd
1   Lisa    Bush 1990-06-12  myPass12
2  Maria  Murphy 1989-03-30  qwErTyUi

>> indexes = df[df.date <= parse('1/1/91')].index
>> new_df = DataFrame(df.drop(indexes))
>>> new_df
  name1   name2       date       pwd
0  John  Mullen 1993-12-08  Passw0rd
3  Seth   Black 1991-06-21  LoveXmas
从导入数据帧
从dateutil.parser导入解析
df=数据帧([['John','Mullen','12/08/1993','Passw0rd'],
…[‘丽莎’、‘布什’、‘1990年12月6日’、‘我的通行证12’],
…['Maria'、'Murphy'、'30/03/1989'、'qwErTyUi'],
…[‘赛斯’、‘布莱克’、‘1991年6月21日’、‘爱的圣诞节’])
df.columns=['name1','name2','date','pwd']
#将日期列转换为日期时间类型
df.date=df.date.apply(解析)
>>>df[df.date>parse('1/1/91')]
名称1名称2日期pwd
约翰·马伦1993-12-08路
3赛斯·布莱克1991-06-21爱情圣诞节
>>>df[df.date>index=df[df.date>new_df=DataFrame(df.drop(index))
>>>新德里
名称1名称2日期pwd
约翰·马伦1993-12-08路
3赛斯·布莱克1991-06-21爱情圣诞节

请用一个特定的用例示例来扩展您的问题,以及您当前解决问题的方法。即使伪代码也可以,您也不必使其可执行。这将有助于更好地理解您的问题。对于日期,您可以执行这将在数据格式不正确的地方生成
NaT
,您可以使用这些位置屏蔽df并将其放置在单独的df中