python数据分析之:数据清理,转换,合并,重塑(二)
一:移除重复数据
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数据分析之:数据清理,转换,合并,重塑(二)的更多相关文章
- python数据分析笔记——数据加载与整理]
[ python数据分析笔记——数据加载与整理] https://mp.weixin.qq.com/s?__biz=MjM5MDM3Nzg0NA==&mid=2651588899&id ...
- 小白学 Python 数据分析(17):Matplotlib(二)基础操作
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 小白学 Python 数据分析(3):Pandas (二)数据结构 Series
在家为国家做贡献太无聊,不如跟我一起学点 Python 顺便问一下,你们都喜欢什么什么样的文章封面图,老用这一张感觉有点丑 人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析( ...
- 利用Python进行数据分析_Pandas_数据清理、转换、合并、重塑
1 合并数据集 pandas.merge pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, le ...
- Python数据分析_Pandas01_数据框的创建和选取
主要内容: 创建数据表 查看数据表 数据表索引.选取部分数据 通过标签选取.loc 多重索引选取 位置选取.iloc 布尔索引 Object Creation 新建数据 用list建series序列 ...
- Python数据分析--------numpy数据打乱
一.shuffle函数: import numpy.random def shuffleData(data): np.random.shufflr(data) cols=data.shape[1] X ...
- Python数据分析:pandas玩转Excel (二)
1 对Excel文件的操作 方法一: 使用xlrd库或者xlwt库进行对excel表格的操作读与写: 方法二: pandas库同样支持excel的读写操作:且更加简便. 2 pd.read_excel ...
- python数据分析之pandas库的DataFrame应用二
本节介绍Series和DataFrame中的数据的基本手段 重新索引 pandas对象的一个重要方法就是reindex,作用是创建一个适应新索引的新对象 ''' Created on 2016-8-1 ...
- Python数据分析Pandas库之熊猫(10分钟二)
pandas 10分钟教程(二) 重点发法 分组 groupby('列名') groupby(['列名1','列名2',.........]) 分组的步骤 (Splitting) 按照一些规则将数据分 ...
- python数据分析工具包(2)——Numpy(二)
上一篇文章简单地介绍了numpy的一些基本数据类型,以及生成数组和矩阵的操作.下面我们来看一下矩阵的基本运算.在线性代数中,常见的矩阵运算包括,计算行列式.求逆矩阵.矩阵的秩等.下面我们来一一实现. ...
随机推荐
- 全站之路一路坑(2)——在Apache下部署django博客
上一篇博客:全栈之路一路坑之使用django开发博客 开发完博客之后,很多后续应用需要博客部署之后才可以使用,这篇文章就来尝试一下将开发好的博客部署到服务器上. 开发阶段,一直使用的是virtuale ...
- 详解Webpack2的那些路径
Webpack2 中有很多涉及路径参数配置,若不知其所以然,很容易混淆出错.本文尽可能的汇集了 Webpack2 中设计路径的配置,力争深入浅出. context context 是 webpack ...
- vps
vps是指虚拟专用服务器(Virtual Private Servers),等同于一台远程计算机,有独立的IP地址,全天24小时不关机,可以部署博客.应用.服务 ***简称SS,可以用来搭建FQ服务器 ...
- Drools的HelloWord例子
添加drools框架运行的依赖 <!--Drools 规则相关 --> <dependency> <groupId>org.drools</groupId&g ...
- Project Euler:Problem 89 Roman numerals
For a number written in Roman numerals to be considered valid there are basic rules which must be fo ...
- Node.js自动化技术实现(Java)
Node.js自动化测试框架(NodeTestFramework):
- ViewPager+Fragment 滑动菜单效果 实现步骤
1.xml中引用ViewPager <android.support.v4.view.ViewPager android:id="@+id/viewPa ...
- 如何将数据导入到hive中
可以通过多种方式将数据导入hive表 1.通过外部表导入 用户在hive上建external表,建表的同时指定hdfs路径,在数据拷贝到指定hdfs路径的同时,也同时完成数据插入external表. ...
- iframe中,重新加载页面
比如在iframe中的页面,设置一个onclick事件的触发函数flush function flush(){ window.location.reload(); }
- DataTable行处理
DataTable dt=new DataTable(); 新增行: DataRow addDR= mydatatable.NewRow();addDR["ID"] = " ...