利用Python进行数据分析_Pandas_基本功能
申明:本系列文章是自己在学习《利用Python进行数据分析》这本书的过程中,为了方便后期自己巩固知识而整理。
第一 重新索引
Series的reindex方法
- In [15]: obj = Series([3,2,5,7,6,9,0,1,4,8],index=['a','b','c','d','e','f','g',
- ...: 'h','i','j'])
- In [16]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'])
- In [17]: obj1
- Out[17]:
- a 3.0
- b 2.0
- c 5.0
- d 7.0
- e 6.0
- f 9.0
- g 0.0
- h 1.0
- i 4.0
- j 8.0
- k NaN
- dtype: float64
新索引值当前值缺失,则需要插值
前向值填充method=’ffill’,最后索引j对应的值来填充
- In [19]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'],metho
- ...: d='ffill')
- In [20]: obj1
- Out[20]:
- a 3
- b 2
- c 5
- d 7
- e 6
- f 9
- g 0
- h 1
- i 4
- j 8
- k 8
- dtype: int64
前向值搬运method=’pad’,最后索引j对应的值来填充
- In [23]: obj1 = obj.reindex(['a','b','c','d','e','f','g','h','i','j','k'],metho
- ...: d='pad')
- In [24]: obj1
- Out[24]:
- a 3
- b 2
- c 5
- d 7
- e 6
- f 9
- g 0
- h 1
- i 4
- j 8
- k 8
- dtype: int64
后向值填充method=’bfill’,最后索引j的后面的索引对应的值来填充,j的后一个位置为NaN的空行
In [62]: obj2 = obj.reindex(['a','b','c','d','e','f','g','k','h','i','j'],metho
...: d='bfill')
In [63]: obj2
Out[63]:
a 3.0
b 2.0
c 5.0
d 7.0
e 6.0
f 9.0
g 0.0
k NaN
h 1.0
i 4.0
j 8.0
dtype: float64
后向值搬运method=’backfill’,最后索引j的后面的索引对应的值来填充,j的后一个位置为NaN的空行
- In [64]: obj2 = obj.reindex(['a','b','c','d','e','f','g','k','h','i','j'],metho
- ...: d='backfill')
- In [65]: obj2
- Out[65]:
- a 3.0
- b 2.0
- c 5.0
- d 7.0
- e 6.0
- f 9.0
- g 0.0
- k NaN
- h 1.0
- i 4.0
- j 8.0
- dtype: float64
DataFrame的reindex方法
修改(行)索引、列,或两个都修改。
引入一个序列,则重新索引行,如下:
- In [86]: data = {'class':['语文','数学','英语'],'score':[120,130,140]}
- In [87]: frame = DataFrame(data)
- In [88]: frame
- Out[88]:
- class score
- 0 语文 120
- 1 数学 130
- 2 英语 140
- In [89]: frame2 = frame.reindex([0,1,2,3])
- In [90]: frame2
- Out[90]:
- class score
- 0 语文 120.0
- 1 数学 130.0
- 2 英语 140.0
- 3 NaN NaN
行、列 都修改
- In [94]: frame3 = frame.reindex(index=[11,22,33],columns = ['a','b','c','d'])
- In [95]: frame3
- Out[95]:
- a b c d
- 11 NaN NaN NaN NaN
- 22 NaN NaN NaN NaN
- 33 NaN NaN NaN NaN
reindex的参数如下:
第二 删除指定轴(索引)上的项
Series
- In [112]: obj = Series([1,2,3,4],index=['a','b','c','d'])
- In [113]: obj
- Out[113]:
- a 1
- b 2
- c 3
- d 4
- dtype: int64
- In [114]: obj1 = obj.drop('c')
- In [115]: obj1
- Out[115]:
- a 1
- b 2
- d 4
- dtype: int64
DataFrame
删除单索引行
- In [109]: frame
- Out[109]:
- class score
- 0 语文 120
- 1 数学 130
- 2 英语 140
- In [110]: obj = frame.drop(0)
- In [111]: obj
- Out[111]:
- class score
- 1 数学 130
- 2 英语 140
删除多索引行
- In [119]: frame
- Out[119]:
- class score
- 0 语文 120
- 1 数学 130
- 2 英语 140
- In [120]: frame.drop([1,2])
- Out[120]:
- class score
- 0 语文 120
删除多索引行(带axis)
- In [130]: frame
- Out[130]:
- class score
- 0 语文 120
- 1 数学 130
- 2 英语 140
- In [131]: frame.drop([1,2],axis=0)
- Out[131]:
- class score
- 0 语文 120
删除列(columns)(带axis)
- In [135]: frame
- Out[135]:
- class score
- 0 语文 120
- 1 数学 130
- 2 英语 140
- In [136]: frame.drop(['class'],axis=1)
- Out[136]:
- score
- 0 120
- 1 130
- 2 140
其中,axis=0,表示行,axis=1,表示列
第三 索引、选取与过滤
Series
- In [1]: from pandas import Series,DataFrame
- In [2]: obj = Series([1,2,3,4],index=['a','b','c','d'])
- In [3]: obj
- Out[3]:
- a 1
- b 2
- c 3
- d 4
- dtype: int64
- In [4]: obj[1]
- Out[4]: 2
- In [5]: obj['c']
- Out[5]: 3
- In [6]: obj[1:2]
- Out[6]:
- b 2
- dtype: int64
- In [7]: obj[2:4]
- Out[7]:
- c 3
- d 4
- dtype: int64
DataFrame
- In [13]: from pandas import DataFrame,Series
- In [14]: data = DataFrame([[1,2,3],[4,5,6],[7,8,9]],index=['a','b','c'],columns
- ...: =['aa','bb','cc'])
- In [15]: data
- Out[15]:
- aa bb cc
- a 1 2 3
- b 4 5 6
- c 7 8 9
索引方式一
- In [16]: data['bb']
- Out[16]:
- a 2
- b 5
- c 8
- Name: bb, dtype: int64
索引方式二
- In [19]: data[:2]
- Out[19]:
- aa bb cc
- a 1 2 3
- b 4 5 6
索引方式三
- In [20]: data[data<4]
- Out[20]:
- aa bb cc
- a 1.0 2.0 3.0
- b NaN NaN NaN
- c NaN NaN NaN
- In [21]: data[data<4]=0
- In [22]: data
- Out[22]:
- aa bb cc
- a 0 0 0
- b 4 5 6
- c 7 8 9
索引方式四
- In [24]: data.ix[:2,['aa','cc']]
- Out[24]:
- aa cc
- a 0 0
- b 4 6
第四 算术运算与数据对齐
Series
- In [36]: a1
- Out[36]:
- a 1
- b 2
- c 3
- d 4
- e 5
- dtype: int64
- In [37]: a2
- Out[37]:
- a 2
- b 3
- c 4
- f 5
- g 6
- dtype: int64
a1+a2
- In [38]: a1+a2
- Out[38]:
- a 3.0
- b 5.0
- c 7.0
- d NaN
- e NaN
- f NaN
- g NaN
- dtype: float64
DataFrame
- In [47]: import numpy as np
- In [48]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))
- In [49]: b1
- Out[49]:
- a b c d
- 0 0.0 1.0 2.0 3.0
- 1 4.0 5.0 6.0 7.0
- 2 8.0 9.0 10.0 11.0
- In [50]: b2 = DataFrame(np.arange(20.).reshape((4,5)),columns=list('abcde'))
- In [51]: b2
- Out[51]:
- a b c d e
- 0 0.0 1.0 2.0 3.0 4.0
- 1 5.0 6.0 7.0 8.0 9.0
- 2 10.0 11.0 12.0 13.0 14.0
- 3 15.0 16.0 17.0 18.0 19.0
- In [52]: b1+b2
- Out[52]:
- a b c d e
- 0 0.0 2.0 4.0 6.0 NaN
- 1 9.0 11.0 13.0 15.0 NaN
- 2 18.0 20.0 22.0 24.0 NaN
- 3 NaN NaN NaN NaN NaN
对NaN进行指定值填充
- In [53]: b1.sub(b2,fill_value=0)
- Out[53]:
- a b c d e
- 0 0.0 0.0 0.0 0.0 -4.0
- 1 -1.0 -1.0 -1.0 -1.0 -9.0
- 2 -2.0 -2.0 -2.0 -2.0 -14.0
- 3 -15.0 -16.0 -17.0 -18.0 -19.0
DataFrame与Series运算
- In [101]: b1
- Out[101]:
- a b c d
0 0.0 1.0 2.0 3.0
- 1 4.0 5.0 6.0 7.0
- 2 8.0 9.0 10.0 11.0
- In [102]: b1.ix[0]
- Out[102]:
a 0.0 b 1.0 c 2.0 d 3.0
- Name: 0, dtype: float64
- In [103]: b1-b1.ix[0]
- Out[103]:
- a b c d
0 0.0 0.0 0.0 0.0
- 1 4.0 4.0 4.0 4.0
- 2 8.0 8.0 8.0 8.0
第五 函数应用于映射
- In [111]: b1
- Out[111]:
- a b c d
- 0 0.0 1.0 2.0 3.0
- 1 4.0 5.0 6.0 7.0
- 2 8.0 9.0 10.0 11.0
- In [112]: f = lambda x:x.max()-x.min()
- In [113]: b1.apply(f)
- Out[113]:
- a 8.0
- b 8.0
- c 8.0
- d 8.0
- dtype: float64
找出DataFrame中每列的最大值和最小值
- In [1]: import numpy as np
- In [2]: from pandas import DataFrame,Series
- In [3]: import pandas as pd
- In [4]: b1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))
- In [5]: b1
- Out[5]:
- a b c d
- 0 0.0 1.0 2.0 3.0
- 1 4.0 5.0 6.0 7.0
- 2 8.0 9.0 10.0 11.0
- In [6]: def f(x):
- ...: return Series([x.min(),x.max()],index=['min','max'])
- ...:
- In [7]: b1.apply(f)
- Out[7]:
- a b c d
- min 0.0 1.0 2.0 3.0
- max 8.0 9.0 10.0 11.0
第六 排序和排名
排序
Series
obj.sort_index()
- In [19]: obj = Series([4,np.nan,7,np.nan,-3,2])
- In [20]: obj
- Out[20]:
- 0 4.0
- 1 NaN
- 2 7.0
- 3 NaN
- 4 -3.0
- 5 2.0
- dtype: float64
- In [21]: obj.sort_index()
- Out[21]:
- 0 4.0
- 1 NaN
- 2 7.0
- 3 NaN
- 4 -3.0
- 5 2.0
- dtype: float64
- In [22]: obj.sort_values()
- Out[22]:
- 4 -3.0
- 5 2.0
- 0 4.0
- 2 7.0
- 1 NaN
- 3 NaN
- dtype: float64
DataFrame
默认升序
data.sort_index()
data.sort_index(axis=1)
data.sort_index(axis=1,ascending=False)
排名
Series
排名会有一个排名值,从1开始。
rank()是平均排名,也就是会出现同排名值的情况。
但是可以通过如下method选项去破坏平级关系:
- In [38]: obj = Series([3,4,2,1,5,7,9,0])
- In [39]: obj
- Out[39]:
- 0 3
- 1 4
- 2 2
- 3 1
- 4 5
- 5 7
- 6 9
- 7 0
- dtype: int64
- In [40]: obj.rank()
- Out[40]:
- 0 4.0
- 1 5.0
- 2 3.0
- 3 2.0
- 4 6.0
- 5 7.0
- 6 8.0
- 7 1.0
- dtype: float64
- In [41]: obj.rank(method='first')
- Out[41]:
- 0 4.0
- 1 5.0
- 2 3.0
- 3 2.0
- 4 6.0
- 5 7.0
- 6 8.0
- 7 1.0
- dtype: float64
- In [42]: obj.rank(ascending=False,method='min')
- Out[42]:
- 0 5.0
- 1 4.0
- 2 6.0
- 3 7.0
- 4 3.0
- 5 2.0
- 6 1.0
- 7 8.0
- dtype: float64
DataFrame
- In [44]: data = DataFrame({'b':[4,7,-3,2],'a':[0,1,0,1],'c':[-2,5,6,7]})
- In [45]: data
- Out[45]:
- a b c
- 0 0 4 -2
- 1 1 7 5
- 2 0 -3 6
- 3 1 2 7
- In [46]: data.rank(axis=1)
- Out[46]:
- a b c
- 0
2.0 3.0 1.0
- 1 1.0 3.0 2.0
- 2 2.0 1.0 3.0
- 3 1.0 2.0 3.0
axis表示行,axis=1表示第一行进行排名,0、4、-2,默认从小到大升序,应该是-2、0、4,所以0的排名值应该是2.0;4的排名值是3.0;-2的排名值是1.0
第七 带有重复值的轴索引
通过is_unique属性可以判断索引是否唯一。
利用Python进行数据分析_Pandas_基本功能的更多相关文章
- 利用Python进行数据分析_Pandas_数据加载、存储与文件格式
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 pandas读取文件的解析函数 read_csv 读取带分隔符的数据,默认 ...
- 利用Python进行数据分析_Pandas_层次化索引
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 层次化索引主要解决低纬度形式处理高纬度数据的问题 import pandas ...
- 利用Python进行数据分析_Pandas_处理缺失数据
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 读取excel数据 import pandas as pd import ...
- 利用Python进行数据分析_Pandas_汇总和计算描述统计
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. In [1]: import numpy as np In [2]: impo ...
- 利用Python进行数据分析_Pandas_数据结构
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 首先,需要导入pandas库的Series和DataFrame In [21] ...
- 利用Python进行数据分析_Pandas_数据清理、转换、合并、重塑
1 合并数据集 pandas.merge pandas.merge(left, right, how='inner', on=None, left_on=None, right_on=None, le ...
- 利用Python进行数据分析_Pandas_绘图和可视化_Matplotlib
1 认识Figure和Subplot import matplotlib.pyplot as plt matplotlib的图像都位于Figure对象中 fg = plt.figure() 通过add ...
- 利用Python进行数据分析(5) NumPy基础: ndarray索引和切片
概念理解 索引即通过一个无符号整数值获取数组里的值. 切片即对数组里某个片段的描述. 一维数组 一维数组的索引 一维数组的索引和Python列表的功能类似: 一维数组的切片 一维数组的切片语法格式为a ...
- 利用Python进行数据分析——Numpy基础:数组和矢量计算
利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...
随机推荐
- mysql的 UUID的生成方式
之前一直用的 int 自增的方式,之后总觉得缺少自信. 之后,我觉得采用uuid的方式,可能会好一些,至于用户统计排序等,则另用属性进行记录. 这里设计到一对矛盾: 安全性 与 网络带宽利 ...
- 简记webpack运行报错 Uncaught TypeError: self.postMessage is not a function
说好2017Fix的还是能重现,可能项目的版本比较旧了,简要记录解决办法 1.错误: index.js?bed3:67 Uncaught TypeError: self.postMessage is ...
- Leetcode题目437:路径总和III(递归-简单)
题目描述: 给定一个二叉树,它的每个结点都存放着一个整数值. 找出路径和等于给定数值的路径总数. 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点). 二 ...
- qt Qt5开发
本章将介绍使用Qt5开发.我们将告诉你如何安装Qt SDK,如何使用Qt Creator IDE创建以及运行一个简单的Hello World应用程序. 一.安装Qt5 SDK Qt SDK包括构建桌面 ...
- JavaScript原型,原型链 ? 有什么特点?
每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时, 如果这个对象内部不存在这个属性,那么他就会去prototype里找这个属性,这个prototype又会 ...
- 小程序checkbox调整大小
.cb{ transform: scale(0.6,0.6); } <view> <label class="lab" for="box1"& ...
- 制作A4纸打印的网页像素大小设置(转)
公司内做系统,要用A4纸打印东西,A4纸标准时mm,换算成像素不知道.网上找找,找到一篇文章,转一下,备用. A4纸的尺寸是210mm*297mm,也就是21.0cm*29.7cm,而1英寸=2.54 ...
- netty 聊天室
https://blog.csdn.net/qq_37372007/article/details/82937584 使用netty实现一个多人聊天室--failed: Error during We ...
- markdown中如何设置字体为红色?
答: 语法如下: <font color='red'> text </font>
- NewLife.XCode 上手指南
想了解什么是XCode 在这里我不对XCode做过多介绍,XCode曾经是一个轻量级ORM组件,现在是一个重量级数据映射框架,支持实体对象数据到不同媒体的数据映射,提供面向对象的方式操作数据库,解决9 ...