Проверка столбцов данных в пандах - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть датафрейм со столбцами, как показано ниже -

u'wellthie_issuer_identifier', u'issuer_name', u'service_area_identifier', u'hios_plan_identifier', u'plan_year', u'type'

Мне нужно проверить значения в каждом столбце и, наконец, иметь действительный фрейм данных.

Например, мне нужно проверить, удовлетворяет ли столбец plan_year ниже проверки

presence: true, numericality: true, length: { is: 4 }

hios_plan_identifier столбец удовлетворяет нижнему регулярному выражению.

          format: /\A(\d{5}[A-Z]{2}[a-zA-Z0-9]{3,7}-TMP|\d{5}[A-Z]{2}\d{3,7}(\-?\d{2})*)\z/,
          presence: true, length: { minimum: 10 },

type столбец содержит,

in: ['MetalPlan', 'MedicarePlan', 'BasicHealthPlan', 'DualPlan', 'MedicaidPlan', 'ChipPlan']

Есть много столбцов, которые мне нужно проверить. Я попытался привести пример данных.

Я могу проверить регулярное выражение с s tr.contains('\A(\d{5}[A-Z]{2}[a-zA-Z0-9]{3,7}-TMP|\d{5}[A-Z]{2}\d{3,7}(\-?\d{2})*)\Z', regex=True)

Similary Я могу проверить другие проверки, а также индивидуально. Я запутался в том, как собрать все проверки вместе. Должен ли я поставить все в if цикл с and условиями. Есть ли простой способ проверки столбцов данных? Нужна помощь здесь

1 Ответ

0 голосов
/ 14 ноября 2018

Есть несколько функций панд, которые вы можете использовать. По сути, синтаксис, который вы можете использовать для фильтрации вашего фрейма данных по содержимому:

df = df[(condition1) & (condition2) & ...] # filter the df and assign to the same df

Специально для вашего случая вы можете заменить condition следующими функциями (выражениями):

df[some_column] == some_value 
df[some_column].isin(some_list_of_values) # This check whether the value of the column is one of the values in the list
df[some_column].str.contains() # You can use it the same as str.contains()
df[some_column].str.isdigit() # Same usage as str.isdigit(), check whether string is all digits, need to make sure column type is string in advance
df[some_column].str.len() == 4 # Filter string with length of 4

Наконец, если вы хотите сбросить индекс, вы можете использовать df = df.reset_index(drop=True) для сброса выходного индекса df на 0,1,2, ...

Редактировать: чтобы проверить значения NaN, NaT, None, вы можете использовать

df[some_column].isnull()

Для нескольких столбцов вы можете использовать

df[[col1, col2]].isin(valuelist).all(axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...