当数据从一个软件环境导出,再导入另一个环境时,可能会产生错误。如果不熟悉新数据集,可能会对数据进行不正确的解释,或者引入其他的误解。如果能抽出一些时间进行数据验证,就可以节省后续可能花费的时间,避免可能出现的错误。

验证数据的一种方法是计算基本的统计量,并与已发布的结果进行比较。例如,全国家庭增长调查的代码本为每个变量提供了概要表。outcome变量对每个妊娠结果进行了编码,其概要表如下:

value label       Total 
1 LIVE BIRTH          9148 
2 INDUCED ABORTION    1862 
3 STILLBIRTH           120 
4 MISCARRIAGE         1921 
5 ECTOPIC PREGNANCY    190 
6 CURRENT PREGNANCY    352

Series类提供了一个value_counts方法,可用于计算每个值出现的次数。如果得到DataFrame中的outcome Series,我们可以使用value_counts方法,将结果与已发布的数据进行比较。

>>> df.outcome.value_counts().sort_index()
1    9148
2    1862
3     120
4    1921 
5     190 
6     352

value_counts返回的结果是一个Series对象。sort_index方法将Series对象按索引排序,使结果按序显示。

我们将得到的结果与官方发布的表格进行对比,outcome变量的值似乎没有问题。类似地,已发布的关于birthwgt_lb的概要表如下:

value label                Total 
. INAPPLICABLE          4449 
0-5 UNDER 6 POUNDS        1125 
6 6 POUNDS              2223 
7 7 POUNDS              3049 
8 8 POUNDS              1889 
9-95 9 POUNDS OR MORE       799

birthwgt_lbvalue_counts结果如下:

>>> df.birthwgt_lb.value_counts(sort=False) 
0        8 
1       40 
2       53 
3       98 
4      229 
5      697 
6     2223 
7     3049 
8     1889 
9      623 
10     132 
11      26 
12      10 
13       3 
14       3 
15       1 
51       1

数值6、7、8的出现次数是正确的。如果计算出0~5和9~95的次数,结果也是正确的。但是,如果再看仔细些,你会发现有一个数值肯定是错的——一个51磅的新生儿!

为了处理这个错误,可以在CleanFemPreg中加入一行代码。

df.birthwgt_lb[df.birthwgt_lb > 20] = np.nan

这行代码将非法值替换为np.nan。方括号中的表达式产生一个bool类型的Series对象,值为True表示满足该条件。当一个布尔Series用作索引时,它只选择满足该条件的元素。

30:00