Pandas 使用NaNs Python对连续功能进行二值化

Pandas 使用NaNs Python对连续功能进行二值化,pandas,binary,nan,Pandas,Binary,Nan,我有一个包含4000行和35个特征的熊猫数据帧,其中一些连续特征包含缺失值(NAN)。例如,其中一个(缺少46个值)具有非常左偏的分布,我希望通过选择阈值1.5对其进行二值化,低于该阈值我希望将其设置为类0,高于或等于1.5作为类1。 比如:X_original=[0.01,2.80,-1.74,1.34,1.55],X_bin=[0,1,0,0,1]。 我试过这样做:dataframe[“bin”]=(dataframe[“original”]>1.5)。 但是,我注意到缺失值(NAN)消失了

我有一个包含4000行和35个特征的熊猫数据帧,其中一些连续特征包含缺失值(NAN)。例如,其中一个(缺少46个值)具有非常左偏的分布,我希望通过选择阈值1.5对其进行二值化,低于该阈值我希望将其设置为类0,高于或等于1.5作为类1。 比如:
X_original=[0.01,2.80,-1.74,1.34,1.55],X_bin=[0,1,0,0,1]。

我试过这样做:
dataframe[“bin”]=(dataframe[“original”]>1.5)。
但是,我注意到缺失值(NAN)消失了,它们被编码在0类中


如何解决此问题?

据我所知,有一种方法可以在比较后保留缺失的值,但您可以执行以下操作:

import pandas as pd
import numpy as np

X_original = pd.Series([0.01,2.80,-1.74, np.nan,1.55])

X_bin = X_original > 1.5
X_bin[X_original.isna()] = np.NaN

print(X_bin)
输出

0    0.0
1    1.0
2    0.0
3    NaN
4    1.0
dtype: float64
0       0
1       1
2       0
3    <NA>
4       1
dtype: Int8
要将列保持为整数(也可为空),请执行以下操作:

输出

0    0.0
1    1.0
2    0.0
3    NaN
4    1.0
dtype: float64
0       0
1       1
2       0
3    <NA>
4       1
dtype: Int8
0
1       1
2       0
3.
4       1
数据类型:Int8

我发现处理此问题的最佳方法是使用列表理解:

dataframe["Bin"] = [0 if el<1.5 else 1 if el >= 1.5 else np.NaN for el in dataframe["Original"]]

对于缺少的值,您想做什么?在我需要使用其余的功能对它们进行插补后,如何计算它们?使用KNN插补器或LSTM