一.缺失值
sklearn中的preprocessing下有imputer,可进官方文档参考。这里主讲pandas。
拿到数据,一般先检查是否有缺失值,用isnul()或notnull().
再决定dropna(),还是fillna()。
1.1 检查是否有缺失值 isnull()、notnull()
import pandas as pd
import numpy as np
df = pd.DataFrame({"col_1":[1, 2, 3, 666, 1480],
"col_2":[125, 999, 110, np.nan, 300],
"col_3":[1389, np.nan, np.nan, np.nan, 0]})
df
|
col_1 |
col_2 |
col_3 |
0 |
1 |
125.0 |
1389.0 |
1 |
2 |
999.0 |
NaN |
2 |
3 |
110.0 |
NaN |
3 |
666 |
NaN |
NaN |
4 |
1480 |
300.0 |
0.0 |
df.isnull() #询问每一个值是不是为NaN.
|
col_1 |
col_2 |
col_3 |
0 |
False |
False |
False |
1 |
False |
False |
True |
2 |
False |
False |
True |
3 |
False |
True |
True |
4 |
False |
False |
False |
df.notnull() #询问每一个值是不是不为NaN,跟上面的相反就是了
|
col_1 |
col_2 |
col_3 |
0 |
True |
True |
True |
1 |
True |
True |
False |
2 |
True |
True |
False |
3 |
True |
False |
False |
4 |
True |
True |
True |
1.2 假设要删除缺失值dropna()
考虑如何删,删行?删列?还是缺失多少个才删?
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
- axis:决定删行删列,默认axis=0,删行;删列要修改axis=1.
- how:决定怎么删,至少有一个NaN就删,还是全是NaN才删。default "any",只要有NA,马上删掉该行或该列。"all",全是NA时才删掉这一行或一整列。
- thresh : 设置该行或列至少有多少个非NA值才能保留下来,有点拗口。输入整数,这个参数有必要才设置,没有就不用管。
- subset : array-like, optional
Labels along other axis to consider, e.g. if you are dropping rows these would be a list of columns to include.
- inplace : 是否直接取代原数据框,默认False,所以我们真要除去行列,会inplace=True,或者给它新赋值到一个变量中。
df.dropna()
|
col_1 |
col_2 |
col_3 |
0 |
1 |
125.0 |
1389.0 |
4 |
1480 |
300.0 |
0.0 |
ing~~~