美文网首页
第7章 数据清洗和准备

第7章 数据清洗和准备

作者: AmaAnchor | 来源:发表于2019-03-27 12:54 被阅读0次

7.1处理缺失数据

image.png

滤除确实数据

dropna方法

In [90]: data.dropna(axis='columns',how='all')
In [105]: df
Out[105]:
          0         1         2
0 -0.592544       NaN       NaN
1 -1.100125       NaN       NaN
2 -0.010423       NaN -1.544200
3 -1.695543       NaN -0.841319
4 -0.631140  0.201259  1.217320
5 -1.445301  0.135728 -1.025898
6  0.661475 -0.425209 -0.838642

thresh参数:将非空值为参数值以上的全部留下

In [102]: df.dropna(thresh=2)
Out[102]:
          0         1         2
2 -0.010423       NaN -1.544200
3 -1.695543       NaN -0.841319
4 -0.631140  0.201259  1.217320
5 -1.445301  0.135728 -1.025898
6  0.661475 -0.425209 -0.838642

填补缺失数据

填补所以的缺失数据

df.fillna('a')

若是通过一个字典调用fillna,就可以实现对不同的列填充不同的值:

In [113]: df.fillna({1:0.5,2:1})
Out[113]:
          0         1         2
0 -0.592544  0.500000  1.000000
1 -1.100125  0.500000  1.000000
2 -0.010423  0.500000 -1.544200
3 -1.695543  0.500000 -0.841319
4 -0.631140  0.201259  1.217320
5 -1.445301  0.135728 -1.025898
6  0.661475 -0.425209 -0.838642

fillna函数支持就地修改:修改参数inplace=True

7.2 数据转换

检验各行是否重复

data.duplicated()

直接删除重复的行

data.duplicated()

指定要进行比较的列

data.duplicated(['k1','k2'])

利用函数或映射进行数据转换

Series.str.lower():将Series对象中的所有字母改为小写
Series对象可以接收一个字典或一个函数。
这样一个例子:
In [205]: data
Out[205]:
food ounces
0 bacon 4.0
1 pulled pork 3.0
2 bacon 12.0
3 Pastrami 6.0
4 corned beef 7.5
5 Bacon 8.0
6 pastrami 3.0
7 honey ham 5.0
8 nova lox 6.0

要为该DataFrame对象添加动物来源列
先写一个字典:关于动物和肉的映射

meat_to_animal = {
  'bacon': 'pig',
  'pulled pork': 'pig',
  'pastrami': 'cow',
  'corned beef': 'cow',
  'honey ham': 'pig',
  'nova lox': 'salmon'
}

根据映射关系将Series对象中相应的值替换掉

In [210]: data['animal']=lowercased.map(meat_to_animal)

使用函数来实现

data['animal']=data['food'].map(lambda x:meat_to_animal[x.lower()])

关于替换元素,有一种更直接的方法:使用replace

#将对象中的-999,-1000全部替换成NA
data.replace([-999,-1000],NA)
#将对象中的-999,-1000分别替换成1和2
data.replace([-999,-1000],[1,2])

或者传入一个字典

 data.replace({-999:1,-1000:2})

重命名轴索引

和Series对象一样,Index对象也可以通过其自身的map方法来修改(传入一个字典或函数)

In [246]: data.index
Out[246]: Index(['Ohio', 'Colorado', 'New York'], dtype='object')

In [247]: data.index.map(lambda x:x[:4].upper())
Out[247]: Index(['OHIO', 'COLO', 'NEW '], dtype='object')

或者使用rename方法(与上面起到相同的效果)

In [252]: data.rename(index=str.title,columns=str.upper)
Out[252]:
          ONE  TWO  THREE  FOUR
Ohio        0    1      2     3
Colorado    4    5      6     7
New York    8    9     10    11

当然也可以传入字典

离散化和面元划分

用于将一组连续的数据划分为各个区间。

使用pandas的cut方法

ages = [20, 22, 25, 27, 21, 23, 37, 31, 61, 45, 41, 32]
bins=[18,25,35,60,100]
pd.cut(ags.bins)

cut方法得到的是一个Categorical对象,它表示被划分的连续数据各个处于的分类区间。即面元
划分时可以传递面元的名称:labels参数

In [274]: cats=pd.cut(ages,bins,labels=group_names)

In [275]: cats

如果传入cut的不是确切的划分,而是数字,则会均匀的分成数字段

#precision参数表示有效数字的位数
pd.cut(data,4,precision=2)

qcut:和cut相似,但分布更均匀

检测和过滤异常值

过滤或变换异常值(outlier)在很大程度上就是运用数组运算

排列和随机采样

产生固定数目的样本:对象.sample方法

choice=pd.Series(np.random.randint(20,size=8))**
choice.sample(n=4)#选取4个随机样本

若选取数目大于集合元素数,且参数replace设为True(允许重复),则随机赋值样本

 choice.sample(n=9,replace=True)

计算指标和哑变量

7.3 字符串操作

image.png image.png

正则表达式

pandas的矢量化字符串

由于对象的map方法的存在,我们可以很方便地修改对象中的值。
但对于那些对象元素有残缺的数据,应用map方法则会报错。

data = {'Dave': 'dave@google.com', 'Steve': 'steve@gmail.com',
   .....:         'Rob': 'rob@gmail.com', 'Wes': np.nan}

data = pd.Series(data)
se.map(lambda x:re.sub('com','cn',x))
TypeError: expected string or bytes-like object

解决方法:修改元素前做个简答的判断即可

 se.map(lambda x:re.sub('com','cn',x) if x is not NA else x)
image.png

相关文章

  • 数据清洗和准备

    一、处理缺失数据 处理方法有: 1、滤除缺失数据 2、填充缺失数据 填充用fillna函数,它的参数有: 其中me...

  • 利用Python进行数据分析复现(六)

    第07章 数据清洗和准备 7.1 处理缺失数据 pandas使用浮点值NaN(Not a Number)表示缺失数...

  • 第07章 数据清洗和准备

    资料来源:https://github.com/BrambleXu/pydata-notebook 在数据分析和建...

  • 第7章 数据清洗和准备

    7.1 处理缺失数据 pandas使用浮点值NaN(Not a Number)表示缺失数据。我们称其为哨兵值,可以...

  • 第7章 数据清洗和准备

    7.1处理缺失数据 滤除确实数据 dropna方法 thresh参数:将非空值为参数值以上的全部留下 填补缺失数据...

  • BD第4课:数据清洗

    如果说抓取数据是数据分析的第1步,那么数据清洗就是数据分析的第2步,那么为什么要进行数据清洗呢?如何进行数据清洗呢...

  • 【Chapter 7.1 】处理缺失数据

    【Chapter 7】 数据清洗和准备 其实数据分析中80%的时间都是在数据清理部分,loading, clear...

  • python数据清洗与准备

    7.1处理缺失值 对于数值型数据,pandas使用浮点数NaN(not a number 来表示缺失值)。我们称N...

  • 12-18、19 第07章 数据清洗和准备

    其实数据分析中80%的时间都是在数据清理部分,loading, clearning, transforming, ...

  • 数据分析实战45讲 笔记五

    11 | 数据科学家80%时间都花费在了这些清洗任务上? 在数据挖掘中,数据清洗就是这样的前期准备工作。对于数据科...

网友评论

      本文标题:第7章 数据清洗和准备

      本文链接:https://www.haomeiwen.com/subject/zabzpqtx.html