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'