В последнее время я начал работать с пандами, и я пытаюсь сделать простую очистку данных. До сих пор я узнал, что при использовании панд существует много однострочных. Поэтому я также рассматриваю один в своем случае. У меня есть DataFrame
как это:Pandas - замена значений NaN с использованием значений из других столбцов
C0 C1 C2 C3 C4
3789507 2010 NaN NaN NaN
3789508 NaN NaN 2010 NaN
3789509 NaN NaN 2016 NaN
3789510 NaN 2014 NaN NaN
3789511 NaN NaN NaN 2014
Я хочу, чтобы в конечном итоге с чем-то вроде этого:
C0 C1
3789507 2010
3789508 2010
3789509 2016
3789510 2014
3789511 2014
Что я делаю сейчас просто:
k = df.C1.isnull()
df.C1[k] = df.C2[k]
k = df.C1.isnull()
df.C1[k] = df.C3[k]
k = df.C1.isnull()
df.C1[k] = df.C4[k]
Это работает, но это не самое приятное решение. Что, если у меня будет 100 столбцов? Является ли здесь единственным решением?
Только в случае, если мой цикл выглядит следующим образом:
for i in range(2,len(df.columns)):
k = df.C1.isnull()
df.C1[k] = df.ix[:,i]
Один вопрос - если это не большая проблема, можете ли вы объяснить, как это работает? Должен ли я читать его со спины? Я имею в виду настоящий случай жизни с выбранными столбцами. – sebap123
Итак, посмотрите на строку, где 'C4' имеет значение, но все остальные столбцы отсутствуют. 'df.bfill (axis = 'columns')' создает новый dataframe, где каждое пропущенное значение слева от 'C4' в этой строке получает значение из' C4'. Допустимое значение в 'C4'« заполнено »во все отсутствующие столбцы. Затем мы просто копируем заполненный столбец C1 в исходный фрейм данных. – Marius
Большое спасибо - теперь я понял. – sebap123