Измените содержимое нулевых столбцов в пандах, проверяя значения в нескольких столбцах

Как легко получить следующую операцию на фрейме данных в пандах с меньшим количеством шагов?

Вход:

di = {'col1': ['1', '2', '5',None, None,'10', None,None], 
  'col2': ['4', '7', None, '8', None, None, '11',None], 
  'col3': ['9', None, '3', '8', None,None, None,'12'],
  'col4': ['abc', 'def', 'ghi', 'jkl', None,'mno', 'pqr',None],
  'col5': ['123', None, '456', '789', None,None, None,'012'],
  }

df = pd.DataFrame(di, dtype=object)

Входные данные:

Измените содержимое нулевых столбцов в пандах, проверяя значения в нескольких столбцах

Обязательный Ouput dataframe:

Измените содержимое нулевых столбцов в пандах, проверяя значения в нескольких столбцах

Метод, который я использовал:

df.loc[~df.col1.isnull() & df.col2.isnull() & df.col3.isnull(), ['col2','col3']] = 'Hello'

df.loc[df.col1.isnull() & ~df.col2.isnull() & df.col3.isnull(), ['col1','col3']] = 'Hello'

df.loc[df.col1.isnull() & df.col2.isnull() & ~df.col3.isnull(), ['col1','col2']] = 'Hello'

df.loc[~df.col1.isnull() & ~df.col2.isnull() & df.col3.isnull(), ['col3']] = 'Hello'

df.loc[df.col1.isnull() & ~df.col2.isnull() & ~df.col3.isnull(), ['col1']] = 'Hello'

df.loc[~df.col1.isnull() & df.col2.isnull() & ~df.col3.isnull(), ['col2']] = 'Hello'
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
102
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Я не уверен, правильно ли я вас понял, но если вы хотите заменить все значения None на «Hello», вы можете просто использовать:

df.fillna("Hello")

df.fillna('Hello', inplace=True). Используйте inplace с умом, прочтите об этом.

IIUC:

Вы хотите заполнить нулевые значения, кроме случаев, когда все они являются нулевыми значениями для строки.

m = df.isna().all(1)
df.fillna(‘Hello’).mask(m, df, axis=0)

Ответил с моего телефона

Спасибо, это работает. Но мне нужно ограничить заполнение нулевых значений этими тремя столбцами, даже если в фрейме данных есть другие столбцы (я обновил свой вопрос)

Alex 25.08.2018 21:58
Ответ принят как подходящий

Если вы просто хотите применить его к этим трем столбцам:

cols = ['col1','col2','col3']
df[cols] = df[df.loc[:,cols].notnull().any(axis=1)][cols].fillna('Hello')
df = df.replace(dict({np.nan: None}))

print(df) 
    col1   col2   col3  col4  col5
0      1      4      9   abc   123
1      2      7  Hello   def  None
2      5  Hello      3   ghi   456
3  Hello      8      8   jkl   789
4   None   None   None  None  None
5     10  Hello  Hello   mno  None
6  Hello     11  Hello   pqr  None
7  Hello  Hello     12  None   012

Другие вопросы по теме