我想使用大期望包来验证 .csv 文件中的列是否只包含整数。
我正在使用的文件在年龄列中只有整数,除了一行有一个“`”字符。这就是我想要的期望。我还在文本编辑器中检查了 .csv 文件,可以确认年龄列中的年龄没有用引号括起来。
但是,期望在 100% 的数据中失败。我认为这是因为 pandas 将列作为对象类型(所以是字符串)读取,因为行不正确。我可以使用类似的东西.astype(int)
对其进行预处理,因为它会在该行上失败。并且包裹.astype(int)
在一个try
块中将完全违背为此使用巨大期望的目的。
这是一个最小的工作示例:
好.csv:
age,name
34,Fred
22,Bob
54,Mary
坏的.csv:
age,name
34,Fred
`,Bob
54,Mary
代码:
import great_expectations as ge
df = ge.read_csv("./good.csv");
my_df.expect_column_values_to_be_of_type('age','int')
df = ge.read_csv("./bad.csv");
my_df.expect_column_values_to_be_of_type('age','int')
第一种情况返回
{'success': True,
'result': {'element_count': 3,
'missing_count': 0,
'missing_percent': 0.0,
'unexpected_count': 0,
'unexpected_percent': 0.0,
'unexpected_percent_nonmissing': 0.0,
'partial_unexpected_list': []}}
所以所有年龄都是整数,它在每一行都成功。我预计第二种情况会失败,但只会在第二行。但是它在所有行上都失败了:
{'success': False,
'result': {'element_count': 3,
'missing_count': 0,
'missing_percent': 0.0,
'unexpected_count': 3,
'unexpected_percent': 1.0,
'unexpected_percent_nonmissing': 1.0,
'partial_unexpected_list': ['34', '`', '54']}}
所以我想我期待这样的事情:
{'success': False,
'result': {'element_count': 3,
'missing_count': 0,
'missing_percent': 0.0,
'unexpected_count': 1,
'unexpected_percent': 0.33,
'unexpected_percent_nonmissing': 1.0,
'partial_unexpected_list': ['`']}}
有什么我做错了,还是包裹不能做到这一点?