Python 验证数据帧单元
我有一个非索引数据帧(从csv文件读取),如下所示: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验证名/姓
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中