验证pandas中的字段格式

时间:2017-02-21 22:35:13

标签: 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.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

使用assert检查格式是否正确:

assert all(sample_data.Age.apply(age_format)) == True, 'Wrong age format'
assert all(sample_data.Name.apply(name_format)) == True, 'Wrong Name format'
assert all(sample_data.Salary.apply(salary_format)) == True, 'Wrong Salary format'
print "THe format is correct"

对于给定的数据,Age字段很好,但是Name和Salary都是错误的。

所以我得到的输出是:

AssertionError: Wrong Name format

我想在这里改进几件事:

1)我没有通过Age断言获得任何输出 2)即使发生异常,我也希望继续进行测试 3)如果可能,我宁愿显示错误发生的第一行的编号,这样可以更容易地纠正错误。

编辑。

我想要的输出类似于:

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

0 个答案:

没有答案