Dan*_*Dan 6 python validation types pandas great-expectations
我想使用Great Expectations包来验证 .csv 文件中的列仅包含整数。
我正在使用的文件在年龄列中只有整数,除了一行具有“”字符之外。这就是我希望期望能够捕捉到的。我还在文本编辑器中检查了 .csv 文件,并可以确认年龄列中的年龄未用引号引起来。
然而,100% 的数据都未能达到预期。我认为这是因为 pandas 正在读取作为对象类型(因此是字符串)的列,因为有一个不正确的行。我可以使用类似的方法对其进行预处理,.astype(int)因为它会在该行上失败。而包裹.astype(int)在一个try块中将完全违背对此寄予厚望的目的。
这是一个最小的工作示例:
好.csv:
age,name
34,Fred
22,Bob
54,Mary
Run Code Online (Sandbox Code Playgroud)
坏.csv:
age,name
34,Fred
`,Bob
54,Mary
Run Code Online (Sandbox Code Playgroud)
代码:
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')
Run Code Online (Sandbox Code Playgroud)
第一个案例返回
{'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': []}}
Run Code Online (Sandbox Code Playgroud)
所以所有的年龄都是整数,并且每一行都成功。我预计第二种情况会失败,但仅限于第二行。但是它在所有行上都失败:
{'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']}}
Run Code Online (Sandbox Code Playgroud)
所以我想我期待这样的事情:
{'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': ['`']}}
Run Code Online (Sandbox Code Playgroud)
是我做错了什么,还是这个包没有能力做到这一点?
作为实施新版本之前的解决方法expect_column_values_to_be_parseasble_as_type,我可以使用正则表达式期望来实现相同的结果:
my_df = ge.read_csv("bad.csv")
pattern = r'^\d+$'
result = my_df.expect_column_values_to_match_regex('age',
pattern,
result_format={'result_format': 'COMPLETE'})
result
# In my case I'm only interested in where it went wrong
# print(result['result']['unexpected_list'])
# print(result['result']['unexpected_index_list'])
Run Code Online (Sandbox Code Playgroud)
这使:
{'success': False,
'result': {'element_count': 3,
'missing_count': 0,
'missing_percent': 0.0,
'unexpected_count': 1,
'unexpected_percent': 0.3333333333333333,
'unexpected_percent_nonmissing': 0.3333333333333333,
'partial_unexpected_list': ['`'],
'partial_unexpected_index_list': [1],
'partial_unexpected_counts': [{'value': '`', 'count': 1}],
'unexpected_list': ['`'],
'unexpected_index_list': [1]}}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您想允许前导 + 或 -,您需要将模式更改为:
pattern = r'^[+-]?\d+$'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7227 次 |
| 最近记录: |