我正在处理从差异来源收集的数据,这导致了一些进一步处理的问题。我拥有的数据可以重新创建如下:
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'