Pandas 和Scikit-learn中处理nan/null的分类器
在本文中,我们将介绍Pandas和Scikit-learn中特殊处理nan/null的分类器。在现实生活中,数据中常常包含缺失值或者NaN(Not a Number)数字。这些缺失值不仅仅会对数据的准确性造成影响,也会干扰数据分析模型的性能。因此,我们需要使用特殊的分类器来处理这些缺失值。
阅读更多:Pandas 教程
缺失值的处理方法
在数据分析中,我们一般用以下方式来处理缺失值:
- 将缺失值剔除,即舍去数据中含有缺失值的样本。
-
将缺失值视为特征空间的值,转化为机器学习模型可处理的特征。通常,这样的处理方法包括将缺失值替换成分布的均值、中位数或者众数。
Pandas中的分类器
在Pandas中,我们常使用的分类器包括:
1. isna()和notna()
isna()和notna()函数是Pandas中最常用的处理缺失值的函数之一。isna()函数会返回一个bool类型位图,用于判断DataFrame的每个位置是否为缺失值;与之相反,notna()函数则会返回每个位置是否为非空值。
下面是一个示例:
import pandas as pd
df = pd.DataFrame({"A": [1, 2, None, 4],
"B": [5, None, None, 8],
"C": [9, 10, 11, 12]})
print(df.isna())
输出:
A B C
0 False False False
1 False True False
2 True True False
3 False False False
2. dropna()
dropna()方法被用于表中删除带有至少一个缺失值的行。下面是一个示例:
df = pd.DataFrame({"A": [1, 2, None, 4],
"B": [5, None, None, 8],
"C": [9, 10, 11, 12]})
droped_df = df.dropna()
输出:
A B C
0 1.0 5.0 9
3 4.0 8.0 12
3. fillna()
fillna()函数用于将表中所有NaN值替换为指定的数据(例如,均值、中位数、0等)。
df = pd.DataFrame({"A": [1, 2, None, 4],
"B": [5, None, None, 8],
"C": [9, 10, 11, 12]})
filled_df = df.fillna(df.mean())
输出:
A B C
0 1.0 5.0 9
1 2.0 6.5 10
2 2.33333333 6.5 11
3 4.0 8.0 12
Scikit-learn中的分类器
在Scikit-learn库中,我们常使用的分类器包括:
1. Imputer()
Imputer()是scikit-learn中处理缺失值的一种方法,功能与fillna()函数类似。Imputer()函数可以根据具有类似属性的其他行或列来计算缺失值。
from sklearn.preprocessing import Imputer
import numpy as np
X = np.array([[1, 2], [np.nan, 3], [7, 6], [4, 5]])
imp=Imputer(missing_values='NaN', strategy='mean', axis=0)
imp.fit(X)
X = imp.transform(X)
输出:
array([[ 1. , 2. ],
[ 4. , 3. ],
[ 7. , 6. ],
[ 4. , 5. ]])
2. KNNImputer()
KNNImputer()是Scikit-learn中一种新颖的处理缺失值的方法。它使用最近邻算法来填充缺失值。
from sklearn.impute import KNNImputer
X = [[2, 3, np.nan], [4, np.nan, 6], [8, 10, 12]]
imputer = KNNImputer(n_neighbors=2, weights="uniform")
X_imputed = imputer.fit_transform(X)
输出:
array([[ 2. , 3. , 9. ],
[ 4. , 6.5, 6. ],
[ 8. , 10. , 12. ]])
总结
缺失值在实际数据处理中是非常常见的,我们需要选择合适的处理方法来处理它们。本文介绍了Pandas和Scikit-learn中可以用来处理缺失值的函数,如isna()、notna()、dropna()、fillna()、Imputer()和KNNImputer()等。使用这些函数,我们可以方便地处理数据中的缺失值。