Pandas 熊猫会在只包含NaN的行上移动
我想结合sklearn的插补和Panda的Ffill来填充缺失的数据。 这就是我的数据帧,Pandas 熊猫会在只包含NaN的行上移动,pandas,scikit-learn,imputation,Pandas,Scikit Learn,Imputation,我想结合sklearn的插补和Panda的Ffill来填充缺失的数据。 这就是我的数据帧,df的样子 FeatA FeatB FeatC FeatD B A B D NaN NaN NaN NaN A A B C NaN A A A NaN B A A 我想使用Ffill将仅包含NaN(例如第2行)的行填充为上一个值 如果行仅包含少数N
df
的样子
FeatA FeatB FeatC FeatD
B A B D
NaN NaN NaN NaN
A A B C
NaN A A A
NaN B A A
我想使用Ffill将仅包含NaN
(例如第2行)的行填充为上一个值
如果行仅包含少数NaN
,例如,如果至少有一个值,则使用插补将NaN填入行中最频繁的值
我使用一个LabelEncoder将字符串值转换为整数——它是按字母顺序排列的<代码>A=0,B=1,C=2,D=3。
为了确保NaN得到值4,我使用data=df.fillna(“Z”)
然后,我对数据进行插补,使带有Z
的任何值都用行中最频繁的值填充——
imp=inputer(缺失值=4,策略='most\u frequency',axis=1)
因此,我想使用
ffill
填充只有NaN
的行
然后我使用LabelEncoder和插补,用行中最频繁的值填充其他NaN
如果我可以选择只包含
NaN
的行,并将ffill
函数仅应用于这些行,那么我可以对另一个NaN使用插补。如何执行此操作?您可以首先使用先前的值仅复制Nan
行,然后继续,如图所示:
## Select rows containing all Nan values and replace them with the preceding values
In [2]: df.loc[df.isnull().all(axis=1), :] = df.ffill()
In [3]: df.fillna('Z', inplace=True)
初始化LabelEncoder
并执行fit
:
In [4]: enc = LabelEncoder()
In [5]: enc.fit(np.unique(df.values))
Out[5]: LabelEncoder()
In [6]: df = df.apply(enc.transform)
用列中最常见的元素填充缺失值:
In [7]: imp = Imputer(missing_values=4, strategy='most_frequent', axis=1)
In [8]: imp.fit_transform(df)
Out[8]:
array([[ 1., 0., 1., 3.],
[ 1., 0., 1., 3.],
[ 0., 0., 1., 2.],
[ 0., 0., 0., 0.],
[ 0., 1., 0., 0.]])
df.fillna(method='ffill',inplace=True)
。这将向前传播最后一个有效观察值,并相应地更改Nan
值。“因此,我想使用ffill填充只有Nan的行。”这将使该行与上面的行相同。为什么不删除那一行呢?这是用于分类模型的输入-我不想删除空行