Проверьте значение цифры c в текстовом столбце - python - PullRequest
0 голосов
/ 26 февраля 2020

5 столбцов (col1 - col5) в 10-столбцовом кадре данных (df) должны быть либо пустыми, либо иметь только текстовые значения. Если какая-либо строка в этих 5 столбцах имеет все цифры c, мне нужно вызвать ошибку. Написал следующий код, чтобы идентифицировать строки, в которых значение равно all-numberri c в 'col1'. (Я переберу все 5 столбцов, используя один и тот же код):

    df2 = df[df['col1'].str.isnumeric()]

Я получаю следующую ошибку: ValueError: не могу замаскировать массив, содержащий значения NA / NaN

Это срабатывает, потому что пустые значения создают NaN вместо False. Я вижу это, когда вместо этого создаю список, используя следующее:

    lst = df['col1'].str.isnumeric()

Есть предложения о том, как решить эту проблему? Спасибо

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Вот способ сделать:

import string
df['flag'] = (df
             .applymap(lambda x: any(i for i in x if i in string.digits))
             .apply(lambda x: f'Fail: {",".join(df.columns[x].tolist())} is numeric', 1))

print(df)

   col1  col2                   flag
0     a  2.04  Fail: col2 is numeric
1  2.02     b  Fail: col1 is numeric
2     c     c      Fail:  is numeric
3     d     e      Fail:  is numeric

Объяснение:

  • Мы перебираем каждое значение кадра данных и проверяем, является ли оно git и возвращаем логическое значение.
  • Мы используем это логическое значение для подмножества имен столбцов

Пример данных

df = pd.DataFrame({'col1': ['a','2.02','c','d'],
                  'col2' : ['2.04','b','c','e']})
0 голосов
/ 26 февраля 2020

Попробуйте это обойти NaN

import pandas as pd

df = pd.DataFrame([{'col1':1}, {'col1': 'a'}, {'col1': None}])
lst = df['col1'].astype(str).str.isnumeric()
if lst.any():
    raise ValueError()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...