Pandas dataframe fillna () только некоторые столбцы на месте
Я пытаюсь заполнить значения none в фрейме данных Pandas с 0 только для некоторого подмножества столбцов.
когда я делаю:
import pandas as pd
df = pd.DataFrame(data={'a':[1,2,3,None],'b':[4,5,None,6],'c':[None,None,7,8]})
print df
df.fillna(value=0, inplace=True)
print df
вывод:
a b c
0 1.0 4.0 NaN
1 2.0 5.0 NaN
2 3.0 NaN 7.0
3 NaN 6.0 8.0
a b c
0 1.0 4.0 0.0
1 2.0 5.0 0.0
2 3.0 0.0 7.0
3 0.0 6.0 8.0
он заменяет все None
С 0
' s. то, что я хочу сделать, это только заменить None
s в столбцы a
и b
, но не c
.
каков наилучший способ сделать это?
5 ответов:
Вы можете выбрать нужные столбцы и сделать это задание:
df[['a', 'b']] = df[['a','b']].fillna(value=0)
результат будет таким, как ожидалось:
a b c 0 1.0 4.0 NaN 1 2.0 5.0 NaN 2 3.0 0.0 7.0 3 0.0 6.0 8.0
можно использовать
dict
,fillna
С разным значением для разных столбцовdf.fillna({'a':0,'b':0}) Out[829]: a b c 0 1.0 4.0 NaN 1 2.0 5.0 NaN 2 3.0 0.0 7.0 3 0.0 6.0 8.0
после присвоить его обратно
df=df.fillna({'a':0,'b':0}) df Out[831]: a b c 0 1.0 4.0 NaN 1 2.0 5.0 NaN 2 3.0 0.0 7.0 3 0.0 6.0 8.0
вы можете избежать копирования объекта с помощью решения Wen и inplace=True:
df.fillna({'a':0, 'b':0}, inplace=True) print(df)
что дает:
a b c 0 1.0 4.0 NaN 1 2.0 5.0 NaN 2 3.0 0.0 7.0 3 0.0 6.0 8.0
вот как вы можете сделать все это в одну строку:
df[['a', 'b']].fillna(value=0, inplace=True)
поломки:
df[['a', 'b']]
выбирает столбцы, для которых вы хотите заполнить значения NaN,value=0
говорит ему заполнить NaNs с нулем, иinplace=True
сделает изменения постоянными, без необходимости делать копию объекта.