一:移除重复数据

DataFrame经常出现重复行,就像下面的这样

In [7]: data=DataFrame({'k1':['one']*3+['two']*4,'k2':[1,1,2,3,3,4,4]})

In [8]: data

Out[8]:

k1  k2

0  one   1

1  one   1

2  one   2

3  two   3

4  two   3

5  two   4

6  two   4

duplicated方法可以判断出每行是否重复了

In [9]: data.duplicated()

Out[9]:

0    False

1     True

2    False

3    False

4     True

5    False

6     True

dtype: bool

既然可以判断重复,那么我们也可以丢弃这些重复项

In [11]: data.drop_duplicates()

Out[11]:

k1  k2

0  one   1

2  one   2

3  two   3

5  two   4

这种丢弃是针对的全部列,也可以指定某一列

In [12]: data.drop_duplicates('k1')

Out[12]:

k1  k2

0  one   1

3  two   3

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

在对数据集进行转换的时候,我们希望对列中的值进行一个转换。转换可以用到map方法

In [13]: data=DataFrame({'food':['bacon','pulled pork','bacon','Pastrami','corne

...: d beef','Bacon','pastrami','honey ham','nova lox'],'ounces':[4,3,12,6,7

...: .5,8,3,5,6]})

In [14]: data

Out[14]:

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

对于上述的各种肉的类型,如果希望指明从那些动物上获取的,那么就要写一个肉到动物的映射。首先完成一个映射表

In [15]: meat_to_animal={'bacon':'pig','pulled pork':'pig','pastrami':'ciw','cor

...: ned beef':'cow','honey ham':'pig','nova lox':'salmon'}

再进行映射,首先是将肉类全部转换成小写字母,然后再和meat_to_animal进行映射

In [16]: data['animal']=data['food'].map(str.lower).map(meat_to_animal)

In [17]: data

Out[17]:

food  ounces  animal

0        bacon     4.0     pig

1  pulled pork     3.0     pig

2        bacon    12.0     pig

3     Pastrami     6.0     ciw

4  corned beef     7.5     cow

5        Bacon     8.0     pig

6     pastrami     3.0     ciw

7    honey ham     5.0     pig

8     nova lox     6.0  salmon

三 替换值

前面在将填充数据的时候用到了fillna的方法。但是其实使用replace方法更简单。

比如下面的这个数据,-000是无效的数据。通过replace的方法直接替换掉

In [18]: data=Series([1,-000,2,3,4])

In [19]: data

Out[19]:

0    1

1    0

2    2

3    3

4    4

dtype: int64

In [20]: data.replace(-000,np.nan)

Out[20]:

0    1.0

1    NaN

2    2.0

3    3.0

4    4.0

dtype: float64

四 离散化和面元划分

为了分析,经常需要将数据拆分成不同的数据,也就是离散化

In [21]: ages=[20,22,25,27,21,23,37,31,61,45,41,32]

In [22]: bins=[18,25,35,60,100]

In [23]: cats=pd.cut(ages,bins)

In [24]: cats

Out[24]:

[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]]

Length: 12

Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]

得到的数据是各自的区间。但是数据呈现这样的方式观测起来很不方便,可以给每个区间加上标签这样更直观些

In [25]: group_name=['youth','youngAdult','MiddleAged','Senior']

In [27]: cats=pd.cut(ages,bins,labels=group_name)

In [28]: cats

Out[28]:

[youth, youth, youth, youngAdult, youth, ..., youngAdult, Senior, MiddleAged, MiddleAged, youngAdult]

Length: 12

Categories (4, object): [youth < youngAdult < MiddleAged < Senior]

如果cut传入的是面元的数量而不是确切的面元边界,则会根据最小值和最大值计算等长面元。比如下面的这个数据,将一些均匀的数据分成了4组

In [29]: data=np.random.rand(20)

In [30]: pd.cut(data,4,precision=2)

Out[30]:

[(0.77, 0.97], (0.15, 0.36], (0.15, 0.36], (0.15, 0.36], (0.77, 0.97], ..., (0.56, 0.77], (0.15, 0.36], (0.15, 0.36], (0.77, 0.97], (0.77, 0.97]]

Length: 20

Categories (4, interval[float64]): [(0.15, 0.36] < (0.36, 0.56] < (0.56, 0.77] < (0.77, 0.97]]

In [32]: group=['first','second','third','fourth']

In [33]: pd.cut(data,4,precision=2,labels=group)

Out[33]:

[fourth, first, first, first, fourth, ..., third, first, first, fourth, fourth]

Length: 20

Categories (4, object): [first < second < third < fourth]

五 检测和过滤异常值

比如下面的4列具有正态分布的数据。通过describe可以得到数据的各项值,比如期望,方差,4分位数等

In [35]: data=DataFrame(np.random.randn(1000,4))

In [36]: data.describe()

Out[36]:

0            1            2            3

count  1000.000000  1000.000000  1000.000000  1000.000000

mean     -0.067684     0.067924     0.025598    -0.002298

std       0.998035     0.992106     1.006835     0.996794

min      -3.428254    -3.548824    -3.184377    -3.745356

25%      -0.774890    -0.591841    -0.641675    -0.644144

50%      -0.116401     0.101143     0.002073    -0.013611

75%       0.616366     0.780282     0.680391     0.654328

max       3.366626     2.653656     3.260383     3.927528

六 排列和随机采样

利用numpy.random.permutation函数可以轻松实现对Series和DataFrame的列的重排工作

In [37]: df=DataFrame(np.arange(5*4).reshape(5,4))

In [38]: df

Out[38]:

0   1   2   3

0   0   1   2   3

1   4   5   6   7

2   8   9  10  11

3  12  13  14  15

4  16  17  18  19

In [41]: sampler

Out[41]: array([1, 0, 2, 3, 4])

In [39]: sampler=np.random.permutation(5)

可以看到根据sampler提供的行索引顺序对数据进行了重排

In [40]: df.take(sampler)

Out[40]:

0   1   2   3

1   4   5   6   7

0   0   1   2   3

2   8   9  10  11

3  12  13  14  15

4  16  17  18  19

python数据分析之:数据清理,转换,合并,重塑(二)的更多相关文章

  1. python数据分析笔记——数据加载与整理]

    [ python数据分析笔记——数据加载与整理] https://mp.weixin.qq.com/s?__biz=MjM5MDM3Nzg0NA==&mid=2651588899&id ...

  2. 小白学 Python 数据分析(17):Matplotlib(二)基础操作

    人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...

  3. 小白学 Python 数据分析(3):Pandas (二)数据结构 Series

    在家为国家做贡献太无聊,不如跟我一起学点 Python 顺便问一下,你们都喜欢什么什么样的文章封面图,老用这一张感觉有点丑 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析( ...

  4. 利用Python进行数据分析_Pandas_数据清理、转换、合并、重塑

    1 合并数据集 pandas.merge pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, le ...

  5. Python数据分析_Pandas01_数据框的创建和选取

    主要内容: 创建数据表 查看数据表 数据表索引.选取部分数据 通过标签选取.loc 多重索引选取 位置选取.iloc 布尔索引 Object Creation 新建数据 用list建series序列 ...

  6. Python数据分析--------numpy数据打乱

    一.shuffle函数: import numpy.random def shuffleData(data): np.random.shufflr(data) cols=data.shape[1] X ...

  7. Python数据分析:pandas玩转Excel (二)

    1 对Excel文件的操作 方法一: 使用xlrd库或者xlwt库进行对excel表格的操作读与写: 方法二: pandas库同样支持excel的读写操作:且更加简便. 2 pd.read_excel ...

  8. python数据分析之pandas库的DataFrame应用二

    本节介绍Series和DataFrame中的数据的基本手段 重新索引 pandas对象的一个重要方法就是reindex,作用是创建一个适应新索引的新对象 ''' Created on 2016-8-1 ...

  9. Python数据分析Pandas库之熊猫(10分钟二)

    pandas 10分钟教程(二) 重点发法 分组 groupby('列名') groupby(['列名1','列名2',.........]) 分组的步骤 (Splitting) 按照一些规则将数据分 ...

  10. python数据分析工具包(2)——Numpy(二)

    上一篇文章简单地介绍了numpy的一些基本数据类型,以及生成数组和矩阵的操作.下面我们来看一下矩阵的基本运算.在线性代数中,常见的矩阵运算包括,计算行列式.求逆矩阵.矩阵的秩等.下面我们来一一实现. ...

随机推荐

  1. (入门SpringBoot)SpringBoot结合拦截器(七)

    SpringBoot拦截器: 拦截器还是照旧和springmvc一样: @Componentpublic class MyInterceptor implements HandlerIntercept ...

  2. 初探ggplot2 geom__制作面积图

        大家大概都对如下信息图并不陌生,该图用100%堆积面积图的方式来表现不同时期不同国家人数所占的比例.这是一种很有意思的表达方式,而面积图也是很常用的数据图表,现在让我们一起来看看如何在R里用g ...

  3. Artix : Arch拥抱OpenRC 使用笔记

    轻量桌面Archlinux用户逃离systemd,拥抱Gentoo的openrc. 镜像源:官方镜像源非常慢,曾经一度体验artix后就放弃了,后来发现了清华和腾讯云的镜像,速度非常快,现在又重新安装 ...

  4. 【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到

    接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...

  5. 优化算法——拟牛顿法之L-BFGS算法

    一.BFGS算法 在"优化算法--拟牛顿法之BFGS算法"中,我们得到了BFGS算法的校正公式: 利用Sherman-Morrison公式可对上式进行变换,得到 令,则得到: 二. ...

  6. C 语言实例

    C 语言实例 C 语言实例 - 输出 "Hello, World!" C 语言实例 - 输出整数 C 语言实例 - 两个数字相加 C 语言实例 - 两个浮点数相乘 C 语言实例 - ...

  7. vuex 中关于 mapState 的作用

    辅助函数 Vuex 除了提供我们 Store 对象外,还对外提供了一系列的辅助函数,方便我们在代码中使用 Vuex,提供了操作 store 的各种属性的一系列语法糖,下面我们来一起看一下: mapSt ...

  8. memcpy( )的使用以及迭代器的使用

    memcpy() -- 拷贝内存内容 相关函数: bcopy(), memccpy(), memmove(), strcpy(), strncpy() 表头文件: #include <strin ...

  9. 硬件问题大杂烩&Coffee lake框图

    PCB阻抗控制 https://www.cnblogs.com/lifan3a/articles/6095372.html 1.高速差分信号串联AC耦合电容什么请况下要做镂空处理: (1)为了阻抗匹配 ...

  10. 基于pcl 和 liblas 库 las与pcd格式(rgb点)相互转换(win10 VS2013 X64环境 )

    #include <liblas/liblas.hpp> #include <iomanip> #include <iostream> #include <s ...