利用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 用于读写 ...
随机推荐
- Redis批量删除缓存数据
背景: 在使用redis中,经常会遇到批量删除缓存的情况,但是对于在客户端中,如果一个一个的删除key,则需要较长时间及相对麻烦,可以使用以下命令,批量删除缓存. 本地批量删除KEY: ./redis ...
- ansible 问题记录(2)
普通用户执行ansible,但是在远程需要root权限,这个时候执行ansible命令报如下错误: 经分析是由于sudo的时候,普通用户没有在sudoer文件 2.在playbook里面使用sudo认 ...
- Qt 的插件制作
首先会遇到一些插件使用的问题: 插件加载的时候出现乱码 qrc:/main.qml:20: Error: Qt.createQmlObject(): failed to create object: ...
- [Ubuntu] A start job is running for...interfaces
CPU:RK3288 系统:Linux 移植 Ubuntu 16.04 到嵌入式平台,如果以太网有问题,在这里会耗时大约5分钟 开机后可以修改 Ubuntu 配置来缩短时间 打开下面的文件,可以看到最 ...
- VUE -- iview table 组件 中使用 upload组件 上传组件 on render 事件不会触发问题
碰到的问题是: upload 组件在 on中写的监听事件不会被触发 在 props 中来监听:==>
- 遇到多个构造器参数时要考虑用构建器 builder 模式 JavaBean 线程安全
effective java p9 JavaBeans模式阻止了把类做成不可变的可能,这需要程序员付出额外的努力来确保它的线程安全.
- this.getClass()和super.getClass()得到的是同一个类
今天dubug代码时发现this.getClass()和super.getClass()得到的竟然是同一个类,都是当前类. 遍访网络资料得出: getClass()不受this和super影响,而是有 ...
- wordpress插件开发从创建一个新的菜单开始
创建插件的目的 1.我们为什么要创建一个插件? IT界有一个知名的论调叫做不要造重复的轮子,如果有可能的话,你应该尽可能的从现有的网络资源上选择一个已有的插件来使用,而不是重新创造一个.它耗费的精力很 ...
- VUE知识点小记
.if里面不能用import方式导入,只能用require方式引入 判断长度大于0 getIssues (vue, data) { let label = '' ) { label = `+label ...
- Android:系统自定义鼠标样式切换
一.APP通过View修改鼠标样式 app view上修改鼠标样式比较简单,通过 hover event 获取鼠标坐标并使用如下方法修改为自定义图片: getWindow().getDecorView ...