Предположим, у меня есть DataFrame, построенный следующим образом:
import pandas as pd
import numpy as np
df = pd.DataFrame(data = {"col1":[3, np.nan, np.nan, 21],
"col2":[4, np.nan, 12, np.nan],
"col3":[33, np.nan, 55, np.nan]})
Что выглядит так:
col1 col2 col3
0 3.0 4.0 33.0
1 NaN NaN NaN
2 NaN 12.0 55.0
3 21.0 NaN NaN
Я хочу отфильтровать столбцы, которые имеют хотя бы одно значение, отличное от NaN, а затем заполнить их на месте.
Если я сделаю следующее:
df.loc[df.dropna(thresh=1).index, :].fillna("fill value")
Это создает новый DataFrame, в котором правильно заполнены значения, и удалена строка, состоящая из NaN.
Но я хочу сохранить всю строку NaN, поэтому я пытаюсь применить это на месте:
df.loc[df.dropna(thresh=1).index, :].fillna("fill value", inplace=True)
но в исходный DataFrame не вносятся изменения - что я делаю не так?
df.loc[df.dropna(thresh=1).index, :]
возвращает копию. Таким образом, параметр inplace относится не к фактическому df, а к этой копии. Он изменяет эту копию, но вы ее никогда не видите. - person ayhan   schedule 24.05.2018