2017-01-06 8 views
0

Я экспериментирую с методом fillna(). Я создал небольшой dataframe и две серии для этой цели:Поведение метода fillna() в Pandas - не подчиняется аргументу inplace - возвращает ошибку на оси 1

 col1 col2 col3  col4 
    0 NaN  NaN 3   4 
    1 NaN  NaN 7   8 
    2 9.0  10.0 11   12 

    n1 = pd.Series([10, 20]) 
    n2 = pd.Series([30, 40, 50, 60]) 
    n2.index = list(df.columns.values) 

Когда я пытаюсь команду:

df.fillna(n1, axis=0, inplace = True) 

Ничего не происходит, NaNs остаются нетронутыми. Я бы ожидал увидеть их замененными значениями 10 (col1) и 20 (col2). Когда я пытаюсь

df.fillna(n2, axis =1) 

Я получаю сообщение об ошибке:

NotImplementedError: Currently only can fill with dict/Series column by column 

Не могли бы вы объяснить это поведение? Ваш совет будет оценен по достоинству.

+0

Я попытался INPLACE аргумент и до сих пор не работает. Кроме того, метод replace возвращает ошибку при вызове с осью = 1. Следовательно, это не дубликат вопроса, который вы указываете. – im7

ответ

0

fillna (как и многие другие методы в пандах) по умолчанию не находится в месте. Вам необходимо либо пройти inplace=True, либо переназначить его возвращаемое значение.

df.fillna(n1, axis=0, inplace=True) 

или

df = df.fillna(n1, axis=0) 

В таких случаях это помогает читать документы:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.fillna.html

Inplace: логическое значение, по умолчанию false. Если True, заполните. Примечание: это изменит любые другие представления этого объекта (например, фрагмент без копии для столбца в DataFrame)
.
.
Возвращает: заполненные: DataFrame