Удалить ячейки по их содержимому

df = pd.DataFrame([[1, '?', 3],
                  [2, '?', 1],
                  [3, '?', 2]], 
columns=['0','1','2'])
df

Необходимо удалить все объекты с пропусками ('?')


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

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

Удалить значения не выйдет, а вот заменить значения на 0 или NaN - запросто. Например:

import pandas as pd

df = pd.DataFrame([[1, 5, 3],
                   [2, 1, 5],
                   [3, 5, 2]],
                   columns=['0','1','2'])


def replace_value(pd_data: pd.DataFrame, value_to_replace: int) -> pd.DataFrame:
    pd_data[pd_data == value_to_replace] = 0
    return pd_data

replace_value(df, 5)

Вывод:

   0  1  2
0  1  0  3
1  2  1  0
2  3  0  2
→ Ссылка
Автор решения: strawdog

Если допустить, что в каждой строке нужно удалить одинаковое количество "пропусков", то можно так:

df = df.replace("?", pd.NA)
df = df.apply(lambda x: pd.Series(x.dropna().values), axis=1)

теперь df:

   0  1
0  1  3
1  2  1
2  3  2

Если количество пропусков в строках - разное, то этот код тоже будет работать, но у вас появятся NaN-значения.

→ Ссылка