Python 验证熊猫中的字段格式

Python 验证熊猫中的字段格式,python,pandas,debugging,assertions,Python,Pandas,Debugging,Assertions,我正在处理从不同来源收集的数据,这导致了一些需要进一步处理的问题。我拥有的数据可以按如下方式重新创建: import pandas as pd import re import numpy as np name = ['Youssef Ahmed','Ibrahim Hassan','George','Jayden Daniel'] age = [25,44,33,22] salary = [3300,'$2900',2000,18000] sample_data = pd.DataFram

我正在处理从不同来源收集的数据,这导致了一些需要进一步处理的问题。我拥有的数据可以按如下方式重新创建:

import pandas as pd
import re
import numpy as np

name = ['Youssef Ahmed','Ibrahim Hassan','George','Jayden Daniel']
age = [25,44,33,22]
salary = [3300,'$2900',2000,18000]
sample_data  = pd.DataFrame({'Name':name,'Age':age,'Salary':salary})
目前,我正在定义一个函数来验证每列的格式:

def age_format(age):
    """Age is a possitive int smaller that 100 """
    if type(age) != np.int64:
        return False
    if 0 < age < 100:
        return True
    return False

def name_format(name):
    """The name consist in two words separeted by a space """
    name_reg_ex = '\w+\s\w+'
    if type(name) != str:
        return False
    if re.search(name_reg_ex,name):
        return True
    return False

def salary_format(salary,max_salary=5000):
    """Salary is a possitive int smaller that max_salary  """ 
    if type(salary) != int:
        return False
    if 0 < salary < max_salary:
        return True
    return False
对于给定的数据,年龄字段很好,但是姓名和薪水都是错误的

所以我得到的结果是:

AssertionError: Wrong Name format
这里有几点我想改进:

1) 我没有通过年龄断言获得任何输出。
2) 即使出现异常,我也希望继续测试。
3) 如果可能的话,我更愿意显示出现错误的第一行的编号,这是为了更容易地更正错误

编辑

我想要的输出类似于以下内容:

'Correct Age format'
'Error in Name format at line 3: George'
'Error in Salary format at line 2: $2900'

'George'
不会因为只有一个单词(不是一个用空格分隔的单词)而使
name\u格式失败吗?另外,
name\u格式的注释应该是
space
而不是
comma
@nbryans是的,它失败了,这就是为什么我得到:AssertionError:错误的名称格式。你对空间的看法是对的。好吧,我从这个问题上想,这对你来说是出乎意料的。我想我错了。如果您不想在异常发生后做任何事情,即“继续测试”,那么我会完全放弃使用
assert
,只在函数中放入
print()
语句,告诉您是否通过了测试。甚至可以考虑使用Python的代码<代码> UNITTest模块,但我认为在这种情况下,这将是多余的。“代码”>“乔治”<代码>是否会失败?<代码> NAMEY格式< /代码>,因为只有一个单词(没有一个单词被一个空格隔开)?另外,
name\u格式的注释应该是
space
而不是
comma
@nbryans是的,它失败了,这就是为什么我得到:AssertionError:错误的名称格式。你对空间的看法是对的。好吧,我从这个问题上想,这对你来说是出乎意料的。我想我错了。如果您不想在异常发生后做任何事情,即“继续测试”,那么我会完全放弃使用
assert
,只在函数中放入
print()
语句,告诉您是否通过了测试。甚至可以考虑使用Python的<代码> UNITTest模块,但我认为在这种情况下这将是多余的。
'Correct Age format'
'Error in Name format at line 3: George'
'Error in Salary format at line 2: $2900'