利用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 用于读写 ...
随机推荐
- 20191214数组之四:数字不相同的完全平方数(关于数位上数字判断与sprintf)
sprintf用法参见之前的随笔;(以解决):
- (转)glances用法
借鉴:https://www.ibm.com/developerworks/cn/linux/1304_caoyq_glances/index.html glances 可以为 Unix 和 Linu ...
- 如何利用awk累加第一列的值?
以下是一个五行文件的例子: 1.[root@master yjt]# seq 5 |awk 'BEGIN{sum=0;print "总和:"}{if(NR<=4)printf ...
- 在取变量名的时候,千万不要用new
这样子是会报错的
- idea 2019激活码
9MWZD5CC4E-eyJsaWNlbnNlSWQiOiI5TVdaRDVDQzRFIiwibGljZW5zZWVOYW1lIjoiMjAxNzY1MDYxQGNxdS5lZHUuY24gLiIsI ...
- arcgis python 刷新
arcpy.RefreshActiveView() 刷新地图和布局窗口 arcpy.RefreshTOC() 刷新内容列表 arcpy.RefreshCatalog(r"F:\tknew10 ...
- spring aop中aspect和advisor的区别
之前看到spring AOP配置aspect(切面)有两种方式,一种是利用注解的方式配置,一种是利用XML的方式配置. 我们的配置是这样的<aop:aspect>,还有另外一种<ao ...
- 个微信小程序云开发云函数
1. project.config.json写上云函数所在目录"cloudfunctionRoot": "cloudfunctions/",如图 2. app. ...
- DataSync 异构数据同步
RAC, Data Gurad, Stream 是Oracle 高可用性体系中的三种工具,每个工具即可以独立应用,也可以相互配合. 他们各自的侧重点不同,适用场景也不同. RAC 它的强项在于解决单点 ...
- Arduino---ESP8266 WIFI模块
一:Arduino安装ESP8266 https://www.arduino.cn/thread-76029-1-1.html(内容截图如下:最简单方法) 选用NodeMCU .0即可 二:简单测试 ...