一、pandas缺失值处理
- 获取缺失值的标记方式:如NAN或其他标记方式
- 以NAN为例,判断数据中是否存在NAN:pd.isnull(df)或pd.notnull(df)
- 若存在缺失值NAN
- dropna(axis='rows'):删除存在的缺失值,不会修改原数据,需接收返回值
- fillna(value, inplace=True):填充缺失值
- value:要替换成的值
- inplace:若为True,将修改原数据,否则不替换修改原数据,生成新对象
- np.any(pd.isnull(data)):data中若有一个缺失值,就返回True
- np.all(pd.notnull(data)):data中若有一个缺失值,就返回False
- 若缺失值未用NAN标记,则将其先替换为np.nan,再进行后续处理
数据如下
1.1 读取判断
如下
data = pd.read_csv("../data/成绩单2.csv", encoding='gbk')
data
pd.isnull(data)
pd.notnull(data)
pd.isna(data)
1.2 删除缺失值与填充缺失值
data.dropna() # 删除缺失值
data['数学'].fillna(data['数学'].mean(), inplace=True) # 替换单列缺失值
data
for i in data.columns: # 循环替换所有缺失值
if np.all(pd.notnull(data[i])) == False:
print(i)
data[i].fillna(data[i].mean(), inplace=True) # 取每一列的均值替换NAN缺失值
data
1.3 非NAN缺失值标记处理
数据如下
- df.replace(to_replace=, value=):替换非NaN缺失值如‘?’为np.nan
- to_replace:替换前的值
- value:替换后的值
- 进行缺失值处理:替换或删除
替换代码及操作如下
data = pd.read_csv("../data/成绩单2.csv", encoding='gbk')
data
data.replace(to_replace='?', value=np.nan) # 将标记为?的缺失值替换为NaN
二、pandas数据离散化
连续属性离散化的目的:为了简化数据结构,数据离散化技术可以用来减少给定连续属性值的个数,常作为数据挖掘的工具
连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数值代表落在每个子区间中的属性值
2.1 离散化
- pd.qcut(data, q):根据等级或样本分位数将变量离散化到大小相等的桶中。例如,10 个分位数的 1000 个值将生成一个 Categorical 对象,指示每个数据点的分位数成员资格。对数据进行分组将数据分组,一般会与value_counts搭配使用,统计每组的个数
- q: 整数或类似列表的浮点数分位数。10 表示十分位数,4 表示四分位数,依此类推。交替的分位数数组,例如 [0, .25, .5, .75, 1.] 表示四分位数
- series.value_counts():统计分组次数
- pd.cut(data, bins):自定义区间分组
data_math = data['数学']
data_math
help(pd.qcut) # 查看该函数用法
qcut = pd.qcut(data_math, q=3)
qcut
qcut.value_counts()
bin = [0, 40, 60, 70, 80, 90, 100] # 自定义区间分组
bin2 = pd.cut(data_math, bins=bin)
bin2
bin2.value_counts() # 统计次数
操作如下
分六组
分三组
自定义区间分组
2.2 pandas中one-hot编码
把每个类别生成一个布尔列,这些列中只有一列可以为这个样本取值为1,又称热编码
- pandas.get_dummies(data, prefix=None):将数据转换为0/1统计类型,即将分类变量转换为虚拟/指标变量
- data:array-like, Series或DataFrame,从中获取虚拟指示器
- prefix:前缀,分组名字,str, str的列表,或str的字典类型,默认无,添加DataFrame列名的字符串。在DataFrame上调用get_dummies时,传递一个长度等于列数的列表。也即是说' prefix '可以是一个将列名映射到前缀的字典
pd.get_dummies(qcut)
pd.get_dummies(qcut, prefix='数学')
help(pd.get_dummies)
查看帮助
学习导航:http://xqnav.top/