Получить все не числовые значения в нескольких столбцах
Похожий вопрос Пытаюсь создать что то вроде автотеста для данных из 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 шт):
Вы в принципе думаете в верном направлении.
Единственная ремарка - ваши столбцы, имеющие строковые значения, всегда будут иметь тип 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
