Получить все не числовые значения в нескольких столбцах

Похожий вопрос Пытаюсь создать что то вроде автотеста для данных из sql. Как я могу отобрать все не числа в нескольких столбцах и получить их в виде нового DF?

По аналогии с данной функцией (возвращает все отсутствующие значения) -

def check_for_null(df): 
    """Проверка на отсутствующие значения всех столбцов""" 
    null_columns = df.columns[df.isnull().any()]
    df = (df[df.isnull().any(axis=1)][null_columns].head())
    return df
df_emptyRows = check_for_null(test_df)

У меня получилось разложить выбранные столбцы по маске True.False, и получить строки с False (это не числа). Не понятно как вернуть значения по индексам. Скорее всего не туда думаю.

 df = df[['zayavleno_st', 'nabrano_st','zayavleno_g','nabrano_g']].applymap(np.isreal).all(1)
 df2 = df.loc[df==False]

()введите сюда описание изображения

Выделенне значения - то, что я хочу получить назад.


Ответы (1 шт):

Автор решения: strawdog

Вы в принципе думаете в верном направлении. Единственная ремарка - ваши столбцы, имеющие строковые значения, всегда будут иметь тип object, то есть числа будут преобразовываться с строки. поэтому, имеет смысл проверять именно строки на то, может ли быть их содержимое числом

При исходных:

import pandas as pd

df = pd.DataFrame({"a":[1,"a",3,4], "b":[11,"b", 33, 44], "c":[111,"c", "cc", 444]})
   a   b    c
0  1  11  111
1  a   b    c
2  3  33   cc
3  4  44  444

сделать можно так, например:

res = df[df.apply(lambda x: x.str.isalpha())]

res:

     a    b    c
0  NaN  NaN  NaN
1    a    b    c
2  NaN  NaN   cc
3  NaN  NaN  NaN
→ Ссылка