Как узнать, есть ли в конкретном столбце DataFrame значение?

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

Есть у меня DataFrame.

Чтобы полноценно его использовать, мне нужно заменить везде "--" на 0.
Сейчас я делаю это так:

f['Conversions'].replace(['--'],[0],inplace=True)

f['CostPerConversion'].replace(['--'],[0],inplace=True)

f['ConversionRate'].replace(['--'],[0],inplace=True)

f['AvgPageviews'].replace(['--'],[0],inplace=True)

f['BounceRate'].replace(['--'],[0],inplace=True)

Проблема заключается в том, что, если в столбце, к которому я применяю код, все таки нет --, происходит ошибка.

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

Однако, если у вас есть элегантные решения типа "заменить во всем DataFrame -- на 0, если таковые есть", то подскажите, пожалуйста.


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

Автор решения: Alexey Leshchenko
df = df.apply(lamdba c: (0 if c == '--'  else c) if c else  0)
→ Ссылка
Автор решения: MaxU

Если вопрос в том как преобразовать все столбцы к числовому типу, то делать это лучше так:

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

In [14]: df
Out[14]:
    a   b   c   d   e
0   1   2   3   4   5
1   6  --   8  --  10
2  11  12  13  14  15
3  16  17  18  --  20
4  21  22  23  24  25

In [15]: df.dtypes
Out[15]:
a     int32
b    object
c     int32
d    object
e     int32
dtype: object

решение:

cols = df.columns[df.dtypes.eq("object")]
df[cols] = df[cols].apply(pd.to_numeric, errors="coerce").fillna(0)

результат:

In [18]: df
Out[18]:
    a     b   c     d   e
0   1   2.0   3   4.0   5
1   6   0.0   8   0.0  10
2  11  12.0  13  14.0  15
3  16  17.0  18   0.0  20
4  21  22.0  23  24.0  25
→ Ссылка
Автор решения: MaxU

Если данный DataFrame получен в результате чтения CSV / Excel файла, то проще всего воспользоваться параметром na_values=["--"]:

df = pd.read_csv(filename, na_values=["--"]).fillna(0)

или

df = pd.read_excel(filename, na_values=["--"]).fillna(0)
→ Ссылка