поиск нечисловых элементов в таблице Pandas
есть таблица данных большая. вроде обработал все данные. перевел в числа, но преобразуя таблицу в флоат, пишет что нельзя строковую перевести строку "No" в float. Как найти в какой строке и столбце содержится элемент "No" и как найти где вообще содержится строковое значение

all_data.astype(float)
выводит:
ValueError: could not convert string to float: 'No'
Ответы (2 шт):
Воспроизводимый пример:
np.random.seed(123)
df = pd.DataFrame(np.random.randint(10, size=(5,5)), columns=list("abcde"))
df.loc[0, "b"] = "XXX"
df.loc[2, "c"] = "AAA"
df.loc[3, "d"] = "ZZZ"
In [80]: df
Out[80]:
a b c d e
0 2 XXX 6 1 3
1 9 6 1 0 1
2 9 0 AAA 9 3
3 4 0 0 ZZZ 1
4 7 3 2 4 7
Теперь мы можем вывести все ячейки, которые либо не могут быть преобразованы в числовой тип данных либо те,которые изначально имели значение NaN:
In [86]: df[df.apply(pd.to_numeric, errors="coerce").isna()].stack().rename_axis(["index","column"])
Out[86]:
index column
0 b XXX
2 c AAA
3 d ZZZ
dtype: object
Поскольку ТС так и не привел воспроизводимый пример, попробуем сами. Генерируем датафрейм, в котором ГДЕ-ТО есть значения "No"
import pandas as pd
data = [{'a': str(i), 'b': str(2 * i)} for i in range(5,8)]
data.append({'a':'1','b':'No'})
data.append({'a':'No','b':'9'})
df=pd.DataFrame(data)
print (df)
Имеем:
a b
0 5 10
1 6 12
2 7 14
3 1 No
4 No 9
Преобразовываем значения "No"во что хотим, для наглядности в 10000
def change_item(item):
if item=='No':
item = '10000'
return item
df = df.applymap(change_item)
print (df)
Получили
a b
0 5 10
1 6 12
2 7 14
3 1 10000
4 10000 9
Естественно, все значения пока символьные. Тепер
df_float=df.apply(pd.to_numeric)
Получили аналогичный датафрейм с типом данных float. И без ошибок преобразования.