数据分析与挖掘入门——学习笔记(九)Pandas高级操作

1 缺失值处理

对于获取到的数据,总会有一些是缺少的,如果这些缺少的数据对于我们的接下来的工作无关紧要,就可以直接舍弃;而有作用的就要应该补齐。我们使用一些电影数据来说明接下来的操作,先看看电影数据的结构

import pandas as pd

# 读取电影数据
movie = pd.read_csv("data/IMDB/IMDB-Movie-Data.csv")
index Rank Title Genre Description Director Actors Year Runtime (Minutes) Rating Votes Revenue (Millions) Metascore
0 1 Guardians of the Galaxy Action,Adventure,Sci-Fi A group of intergalactic criminals are forced … James Gunn Chris Pratt, Vin Diesel, Bradley Cooper, Zoe S… 2014 121 8.1 757074 333.13 76.

1.1 判断缺失值

首先判断是否空缺值

pd.notnull(movie)  # 这个函数会把NaN的数值返回False,非NaN的数值返回True
pd.isnull(movie).head(10)  # 这个函数会把NaN的数值返回True,非NaN的数值返回False

1.2 丢弃缺失值

对于不重要的数据可以直接舍弃

movie.size
# 12000

movie = movie.dropna()  # 丢弃空缺的数据行

movie.size  
# 10056

丢弃之后数量从12000变成了10056

1.3 替换缺失值

通常情况下缺失的只是一组数据的一小部分,这时候丢弃就是非常浪费的了,同时如果这组数据比较重要,那么丢弃就不可取,而是使用替换。

替换可以用中位数、众数、均值等替换,或者回归方程,最近值、固定值替换,高级一点可以使用拉 格朗日插值法和牛顿插值法

import numpy as np

# 读取电影数据
movie = pd.read_csv("data/IMDB/IMDB-Movie-Data.csv")
np.any(pd.isnull(movie))
# True
# ①判断哪一列有缺失值
for col in movie.columns:
    # pd.isnull(movie[col])将当前列的缺失值转换为True,any()判断数组中是否至少有一个为True,是就返回True
    if (np.any(pd.isnull(movie[col]))):
        # 使用fillna()来填充缺失值,第一个参数的替换后的值,inplace参数表示是否修改原数据
        movie[col].fillna(movie[col].mean(), inplace=True) 
np.any(pd.isnull(movie))  # 可以看到在变换之后any返回为False,说明已经没有缺失值了
# False

1.4 当缺失值不为NaN的时候

把它替换成NaN,如下面这组缺失值为?的数据

wis = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data")
·····
22  1057013 8   4   5   1   2   ?   7   3   1   4
·····

这种情况下用any有缺失值但是不是NaN所以判断不出来

np.any(pd.isnull(wis))  # 
False

那么,就先替换掉这个?,变成NaN

# 如果缺失值不是np.NaN  首先替换成nan
wis = wis.replace(to_replace='?', value=np.NAN) 

np.any(pd.isnull(wis))  # 再次查看是否有缺失值
True   # 可以看到现在是有缺失值的

接下来在进行其他缺失值操作

2 数据的离散化

  • 离散化的概念
    • 把连续的数据 分成几段, 处于某一段中的所有数据 忽略他们之间的区别
    • 离散化的作用
    • ① 可以降低数据属性的个数
    • ② 可以是数据稳定性更强
    • ③ 可以降低异常值对结果的影响
    • ④有一些算法 更适合处理离散的值 比如逻辑回归

案例:股票的涨跌幅离散化
我们对股票每日的”p_change”进行离散化
先看看数据

data = pd.read_csv("data/stock_day/stock_day.csv")
p_change= data['p_change'
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值