利用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 用于读写 ...
随机推荐
- python ros 警报上报
#!/usr/bin/env python2. # -*- coding: utf- -*- import rospy import time from common_msgs.msg import ...
- Linux下vim卡死原因
使用vim的时候,偶尔会碰到vim莫名其妙的僵在那里. 解决方案: 经查,原来Ctrl+S在Linux里是锁定屏幕的快捷键,如果要解锁,按下Ctrl+Q就可以了. 经验总结: 牢记这两个VIM组合键 ...
- BZOJ3781小B的询问
莫队裸题. 维护的时候有的打法是利用(a-1)^2==a^2-2*a+1转移,也可以,但是通用性不太够. 下面的打法就是先把这个点的贡献删掉,然后更新这个点,再把这个点的贡献加回来,这种解法更加通用一 ...
- IIS Express(电脑无管理员权限如何启用VS调试)
转载页面:https://www.cnblogs.com/xbblogs/p/4756552.html(详细版) 直接按照红色字体步骤执行,其他字体可先忽略 出问题再详细看 1.设置配置文件 ...
- ngx.shared.DICT.expire 详解
ngx.shared.DICT.expire 原文链接: ngx.shared.DICT.expire syntax: success, err = ngx.shared.DICT:expire(ke ...
- js vue --- T Z 去掉 T Z 时间
export const formatDate = (timestamp) => { return timestamp.replace(/T/g,' ').replace(/Z/g,'') } ...
- 使用Lock对象实现同步效果
Lock是一个接口,为了使用一个Lock对象,需要用到 Lock lock = new ReentrantLock(); 与 synchronized (someObject) 类似的,loc ...
- Node.jsp配环境更新中)
设置用户密码sudo passwd user1sudo passwd root 创建新用户sudo useradd -d /home/share -m sharesu share设置新用户密码sudo ...
- PAT 甲级 1034 Head of a Gang (30 分)(bfs,map,强连通)
1034 Head of a Gang (30 分) One way that the police finds the head of a gang is to check people's p ...
- 将任意音频格式文件转换成16K采样率16bit的wav文件
此转换需要使用ffmpeg 假设有目录 d:\录音 目录有 张三.m4a, 李四.m4a xxx.m4a(其他任意格式音频触类旁通可以把 *.m4a改成*.*).批量转换成采样率16K,有符号,16b ...