Я хочу использовать пакет с большими ожиданиями , чтобы проверить, что столбец в CSV-файле содержит только целые числа.
Файл, который я использую, содержит только целые числа в столбце возраста, за исключением одной строки, в которой вместо этого есть символ «». Это то, что я хочу, чтобы ожидания уловили. Я также проверил файл .csv в текстовом редакторе и могу подтвердить, что возраст в столбце возраста не заключен в кавычки.
Однако ожидание не выполняется на 100% данных. Я думаю, это потому, что pandas читает столбец как тип объекта (то есть строку) из-за одной неверной строки. Я могу предварительно обработать это, используя что-то вроде .astype(int)
, потому что в этой строке произойдет сбой. А завертывание .astype(int)
в try
блоке полностью уничтожит цель использования больших ожиданий для этого.
Вот минимальный рабочий пример:
good.csv:
age,name
34,Fred
22,Bob
54,Mary
bad.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': ['`']}}
Есть ли что-то, что я делаю неправильно, или пакет просто не способен на это?