Pandas 填充仅包含 NaN 的行
Pandas Ffill on rows that contain only NaN
我想结合sklearn的imputation和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 行)填充为之前的值。
如果行仅包含几个 NaN
,例如,如果至少有 1 个值,则使用插补法用行中出现频率最高的值填充 NaN。
我正在使用 LabelEncoder 将字符串值转换为整数——它是按字母顺序排列的。 A=0, B=1, C=2, D = 3
。
为了确保 NaN 获得值 4 ,我将 NaN 转换为“Z”——使用 data = df.fillna("Z")
然后我对数据进行估算,以便 Z
的任何值都填充行中出现频率最高的值 –
imp = Imputer(missing_values=4, strategy= 'most_frequent', axis=1)
所以,我想使用 ffill
.
填充只有 NaN
的行
然后我使用 LabelEncoder 和插补来用行中出现频率最高的值填充其他 NaN
。
如果我可以 select 仅包含 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.]])
我想结合sklearn的imputation和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 行)填充为之前的值。
如果行仅包含几个 NaN
,例如,如果至少有 1 个值,则使用插补法用行中出现频率最高的值填充 NaN。
我正在使用 LabelEncoder 将字符串值转换为整数——它是按字母顺序排列的。 A=0, B=1, C=2, D = 3
。
为了确保 NaN 获得值 4 ,我将 NaN 转换为“Z”——使用 data = df.fillna("Z")
然后我对数据进行估算,以便 Z
的任何值都填充行中出现频率最高的值 –
imp = Imputer(missing_values=4, strategy= 'most_frequent', axis=1)
所以,我想使用 ffill
.
NaN
的行
然后我使用 LabelEncoder 和插补来用行中出现频率最高的值填充其他 NaN
。
如果我可以 select 仅包含 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.]])