十分钟搞定pandas内容
参考:http://pandas.pydata.org/pandas-docs/stable/whatsnew.html
https://www.cnblogs.com/chaosimple/p/4153083.html
十分钟搞定pandas
#需要导入以下所需要的包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
一、创建对象
1、可以通过传递一个list对象来创建一个Series, pandas会默认创建整型索引:
#创建一个序列
s = pd.Series([1,3,5,np.nan,6,8])
s
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64
2、通过传递一个numpy array,时间索引以及列标签来创建一个数据帧DataFrame:
#创建一个时间范围,周期为6
dates = pd.date_range('20130101',periods=6)
dates
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
#创建一个6行5列的数据帧,行名称为日期,列属性名称为ABCDE,内容由randn函数创建,
#若不存在 index=dates , 则行名用1,2,3等数字表示;若不存在 columns=list('ABCDE'),则列属性名称也用1,2,3等数字表示
df = pd.DataFrame(np.random.randn(6,5),index=dates,columns=list('ABCDE'))
df
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 2013-01-01 | -0.964738 | -0.613643 | 0.111717 | -0.355337 | -0.395985 |
| 2013-01-02 | 0.898280 | -1.447527 | -1.390847 | 0.344747 | -0.476424 |
| 2013-01-03 | 0.199546 | 1.277674 | -0.634270 | 0.014981 | -0.028560 |
| 2013-01-04 | -0.362915 | -1.069098 | -0.567669 | -0.234415 | 0.585418 |
| 2013-01-05 | 0.761135 | -2.116771 | 0.745177 | 0.851333 | -0.624389 |
| 2013-01-06 | 0.052822 | -0.689503 | -0.401462 | 1.050330 | -1.098080 |
3、使用传递的可转换序列的字典对象创建数据帧DataFrame:
#创建数据帧,每个字典的关键字表示列属性,键值对应列属性的value
df2 = pd.DataFrame({ 'A' : 1.,
'B' : pd.Timestamp('20130102'),
'C' : pd.Series(1,index=list(range(5)),dtype='float32'),
'D' : np.array([3] * 5,dtype='int32'),
'E' : pd.Categorical(["test","train","test","train","sss"]),
'F' : 'foo' })
df2
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | F | |
|---|---|---|---|---|---|---|
| 0 | 1.0 | 2013-01-02 | 1.0 | 3 | test | foo |
| 1 | 1.0 | 2013-01-02 | 1.0 | 3 | train | foo |
| 2 | 1.0 | 2013-01-02 | 1.0 | 3 | test | foo |
| 3 | 1.0 | 2013-01-02 | 1.0 | 3 | train | foo |
| 4 | 1.0 | 2013-01-02 | 1.0 | 3 | sss | foo |
#查看数据帧中各类数据类型,只能用于查看字典形成的数据帧,用randn形成的数据帧不能使用该命令,否则出错
df2.dtypes
A float64
B datetime64[ns]
C float32
D int32
E category
F object
dtype: object
#df2. <TAB>
如你所见, 列 A, B, C, 和 D 也是自动完成标签. E 也是可用的; 为了简便起见,后面的属性显示被截断.
二、查看数据
1、查看帧顶部和底部行
#df.head(5)表示查看数据帧df的头五行,默认为5,也可看头3行
df.head()
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 2013-01-01 | -0.964738 | -0.613643 | 0.111717 | -0.355337 | -0.395985 |
| 2013-01-02 | 0.898280 | -1.447527 | -1.390847 | 0.344747 | -0.476424 |
| 2013-01-03 | 0.199546 | 1.277674 | -0.634270 | 0.014981 | -0.028560 |
| 2013-01-04 | -0.362915 | -1.069098 | -0.567669 | -0.234415 | 0.585418 |
| 2013-01-05 | 0.761135 | -2.116771 | 0.745177 | 0.851333 | -0.624389 |
#df.tail(3)表示查看数据帧df的尾3行,默认为5
df.tail(3)
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 2013-01-04 | -0.362915 | -1.069098 | -0.567669 | -0.234415 | 0.585418 |
| 2013-01-05 | 0.761135 | -2.116771 | 0.745177 | 0.851333 | -0.624389 |
| 2013-01-06 | 0.052822 | -0.689503 | -0.401462 | 1.050330 | -1.098080 |
2、显示数据帧的索引,列和底层numpy数据
#取出数据帧df的索引项,即行名称
df.index
DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
'2013-01-05', '2013-01-06'],
dtype='datetime64[ns]', freq='D')
#取出数据帧df的属性列名称
df.columns
Index(['A', 'B', 'C', 'D', 'E'], dtype='object')
#取出数据帧df中的内容,这一点很重要,能够将数据帧的行索引项名称和列属性项名称去掉
df.values
array([[-0.96473798, -0.61364267, 0.11171683, -0.35533705, -0.39598527],
[ 0.8982796 , -1.44752742, -1.39084675, 0.3447475 , -0.47642425],
[ 0.19954556, 1.27767394, -0.63427023, 0.01498146, -0.0285603 ],
[-0.36291476, -1.06909798, -0.56766898, -0.23441501, 0.58541824],
[ 0.7611348 , -2.11677119, 0.74517694, 0.85133303, -0.62438946],
[ 0.05282224, -0.68950339, -0.4014616 , 1.05032997, -1.09808038]])
3、描述显示数据快速统计摘要
#描述数据帧df中的内容的一些统计项,包括数目、均值、标准差、最小最大值及其中间值
df.describe()
type(df)
pandas.core.frame.DataFrame
4、转置数据
#将行列进行转化,包括索引项、列属性项以及其中的内容
df.T
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| 2013-01-01 00:00:00 | 2013-01-02 00:00:00 | 2013-01-03 00:00:00 | 2013-01-04 00:00:00 | 2013-01-05 00:00:00 | 2013-01-06 00:00:00 | |
|---|---|---|---|---|---|---|
| A | -0.964738 | 0.898280 | 0.199546 | -0.362915 | 0.761135 | 0.052822 |
| B | -0.613643 | -1.447527 | 1.277674 | -1.069098 | -2.116771 | -0.689503 |
| C | 0.111717 | -1.390847 | -0.634270 | -0.567669 | 0.745177 | -0.401462 |
| D | -0.355337 | 0.344747 | 0.014981 | -0.234415 | 0.851333 | 1.050330 |
| E | -0.395985 | -0.476424 | -0.028560 | 0.585418 | -0.624389 | -1.098080 |
5、按轴排序
#若axis=1,则行索引项不变,列属性项进行竖轴转换,内容不改变;若axis=0,则列属性项不变,行索引项进行横轴转换,内容不改变;默认为axis=0,即横轴转换
# ascending=Flase 必须存在,否则数据帧不作任何改变
df.sort_index(axis=1, ascending=False)
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| E | D | C | B | A | |
|---|---|---|---|---|---|
| 2013-01-01 | -0.395985 | -0.355337 | 0.111717 | -0.613643 | -0.964738 |
| 2013-01-02 | -0.476424 | 0.344747 | -1.390847 | -1.447527 | 0.898280 |
| 2013-01-03 | -0.028560 | 0.014981 | -0.634270 | 1.277674 | 0.199546 |
| 2013-01-04 | 0.585418 | -0.234415 | -0.567669 | -1.069098 | -0.362915 |
| 2013-01-05 | -0.624389 | 0.851333 | 0.745177 | -2.116771 | 0.761135 |
| 2013-01-06 | -1.098080 | 1.050330 | -0.401462 | -0.689503 | 0.052822 |
6、按值排序
#df.sort_values(columns='B')
df.sort_values(by='B') #一开始是columns指定列排序,现在改为了by进行排序
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 2013-01-05 | 0.761135 | -2.116771 | 0.745177 | 0.851333 | -0.624389 |
| 2013-01-02 | 0.898280 | -1.447527 | -1.390847 | 0.344747 | -0.476424 |
| 2013-01-04 | -0.362915 | -1.069098 | -0.567669 | -0.234415 | 0.585418 |
| 2013-01-06 | 0.052822 | -0.689503 | -0.401462 | 1.050330 | -1.098080 |
| 2013-01-01 | -0.964738 | -0.613643 | 0.111717 | -0.355337 | -0.395985 |
| 2013-01-03 | 0.199546 | 1.277674 | -0.634270 | 0.014981 | -0.028560 |
三、选择器
注释: 标准Python / Numpy表达式可以完成这些互动工作, 但在生产代码中, 我们推荐使用优化的pandas数据访问方法, .at, .iat, .loc, .iloc 和 .ix.
1、读取
(1)选择单列,这会产生一个序列,等价与df.A
df['A']
2013-01-01 -0.964738
2013-01-02 0.898280
2013-01-03 0.199546
2013-01-04 -0.362915
2013-01-05 0.761135
2013-01-06 0.052822
Freq: D, Name: A, dtype: float64
(2)使用 [] 选择行切片,若想进行列切片,可以先将数据帧进行转置,然后切片,最后转换回来
#只能进行行切片,不能做列切片;
df[0:3]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 2013-01-01 | -0.964738 | -0.613643 | 0.111717 | -0.355337 | -0.395985 |
| 2013-01-02 | 0.898280 | -1.447527 | -1.390847 | 0.344747 | -0.476424 |
| 2013-01-03 | 0.199546 | 1.277674 | -0.634270 | 0.014981 | -0.028560 |
df['20130102':'20130104']
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 2013-01-02 | 0.898280 | -1.447527 | -1.390847 | 0.344747 | -0.476424 |
| 2013-01-03 | 0.199546 | 1.277674 | -0.634270 | 0.014981 | -0.028560 |
| 2013-01-04 | -0.362915 | -1.069098 | -0.567669 | -0.234415 | 0.585418 |
2、使用标签选择
(1)使用标签获取横截面
#获取数据帧的某一行,此处若写成 df.loc[dates[0]], 则出现错误
df.loc[dates[0]]
A -0.964738
B -0.613643
C 0.111717
D -0.355337
E -0.395985
Name: 2013-01-01 00:00:00, dtype: float64
(2)使用标签选择多轴
#取出两个列属性的所有行
df.loc[:,['A','B']]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | |
|---|---|---|
| 2013-01-01 | -0.964738 | -0.613643 |
| 2013-01-02 | 0.898280 | -1.447527 |
| 2013-01-03 | 0.199546 | 1.277674 |
| 2013-01-04 | -0.362915 | -1.069098 |
| 2013-01-05 | 0.761135 | -2.116771 |
| 2013-01-06 | 0.052822 | -0.689503 |
(3)显示标签切片,包含两个端点
#取出数据帧中的3行2列
df.loc['20130102':'20130104',['A','B']]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | |
|---|---|---|
| 2013-01-02 | 0.898280 | -1.447527 |
| 2013-01-03 | 0.199546 | 1.277674 |
| 2013-01-04 | -0.362915 | -1.069098 |
(4)降低返回对象维度
#通过选取某一行,提取出该行的列属性值,从而达到降低维度的作用
df.loc['20130102',['A','B']]
A 0.898280
B -1.447527
Name: 2013-01-02 00:00:00, dtype: float64
#取出数据帧的行列名称---标签,取其中的内容
df.loc['20130102',['A','B']].values
array([ 0.8982796 , -1.44752742])
(5)获取标量值
#获取某一行某一列的值,行列用对应标签取出
df.loc[dates[0],'A']
-0.9647379819614053
(6)快速访问并获取标量数据(同上面的方法一样)
df.at[dates[0],'A']
-0.9647379819614053
3、按位置选择 —— 对应按标签选择
(1)传递整数选择位置
#这里只需要指明第3行,即可取出;对应前面的df.loc[date[0]],需要指明行的属性的第0行
df.iloc[3]
A -0.362915
B -1.069098
C -0.567669
D -0.234415
E 0.585418
Name: 2013-01-04 00:00:00, dtype: float64
(2)使用整数片段,效果类似 numpy / python
df.iloc[3:5,0:2]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | |
|---|---|---|
| 2013-01-04 | -0.362915 | -1.069098 |
| 2013-01-05 | 0.761135 | -2.116771 |
(3)使用整数偏移定位列表,效果类似于 numpy / python 样式
超级重要,正好解决燃眉之急
#直接就可以取出自己想要取出的某一行某一列,相当有用
df.iloc[[1,2,4],[0,2]]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | C | |
|---|---|---|
| 2013-01-02 | 0.898280 | -1.390847 |
| 2013-01-03 | 0.199546 | -0.634270 |
| 2013-01-05 | 0.761135 | 0.745177 |
(4)显示行切片——爆裂所有列
df.iloc[1:3,:]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 2013-01-02 | 0.898280 | -1.447527 | -1.390847 | 0.344747 | -0.476424 |
| 2013-01-03 | 0.199546 | 1.277674 | -0.634270 | 0.014981 | -0.028560 |
(5)显示列切片——保留所有行
df.iloc[:,1:3]
.dataframe tbody tr th:only-of-type {
vertical-align: middle;
}
.dataframe tbody tr th {
vertical-align: top;
}
.dataframe thead th {
text-align: right;
}
| B | C | |
|---|---|---|
| 2013-01-01 | -0.613643 | 0.111717 |
| 2013-01-02 | -1.447527 | -1.390847 |
| 2013-01-03 | 1.277674 | -0.634270 |
| 2013-01-04 | -1.069098 | -0.567669 |
| 2013-01-05 | -2.116771 | 0.745177 |
| 2013-01-06 | -0.689503 | -0.401462 |
(6)显示获取一个值
#取出第一行第一列的数值
df.iloc[1,1]
-1.4475274167250514
(7)快速访问一个标量——等同上个方法
df.iat[1,1]
-1.4475274167250514
十二、导入和保存数据
导入csv文件时,添加列名的方式为:
x0=pd.read_csv(input_file, header=None, names=Feature)
若数据以tab分隔,则读取时可以去除的方式,如下:
df = pd.read.csv('../input/data_train.csv', sep='\t', encoding='GBK')
可以用sep参数进行去除;
十分钟搞定pandas内容的更多相关文章
- 【原】十分钟搞定pandas
http://www.cnblogs.com/chaosimple/p/4153083.html 本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译 ...
- 十分钟搞定 pandas
原文:http://pandas.pydata.org/pandas-docs/stable/10min.html 译者:ChaoSimple 校对:飞龙 官方网站上<10 Minutes to ...
- 十分钟搞定pandas
转至:http://www.cnblogs.com/chaosimple/p/4153083.html 本文是对pandas官方网站上<10 Minutes to pandas>的一个简单 ...
- 【Python笔记】十分钟搞定pandas
本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...
- 【转】十分钟搞定pandas
原文链接:http://www.cnblogs.com/chaosimple/p/4153083.html 关于pandas的入门介绍,比较全,也比较实在,特此记录~ 还有关于某同学的pandas学习 ...
- 十分钟搞定CSS选择器
在最近的web开发中是不是就会用到一些选择器,发现很多尤其是CSS3新增的不太熟悉,在此总结一下. 优先级 不同级别 1. 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式. ...
- (转)十分钟搞定CSS选择器
原文地址:http://www.cnblogs.com/dolphinX/p/3347713.html 在最近的web开发中是不是就会用到一些选择器,发现很多尤其是CSS3新增的不太熟悉,在此总结一下 ...
- JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载
最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 1. 获取用 ...
- 十分钟搞定微信企业帐号“echostr校验失败,请您检查是否正确解密并输出明文echostr”
问题域:在这里我们只解决密文可以正确解密,但微信验证提示“echostr校验失败,请您检查是否正确解密并输出明文echostr”的问题. 干货:没有正确验证的原因是:你给微信返回的是字符串,而微信需要 ...
随机推荐
- 使用msi自动安装系统
在实际生活中, 还是要尽量使用 自动化 脚本 等来处理/执行问题, 那样更快更省力省时间 要多使用 网络工具, 网络工具在 管理/ 使用网络的过程 中还是很有用的. 要有这种 "多使用网络工 ...
- LightOJ 1027 A Dangerous Maze(期望)题解
题意:n扇门,每扇门后都有一个值x,如果x<0会让你等待-x再重新回到这里选择门,x>0你经过x时间就会被传送走,问你被传送走的期望 思路:假设被传送走的期望为E,那么对于x<0来说 ...
- linux golang
wget -c http://www.golangtc.com/static/go/go1.3.linux-386.tar.gz #下载32位Linux的够源码包 tar -zxvf go1.1.li ...
- HTML XHTML HTNL5 简介
XHTML 是HTML与XML(扩展标记语言)的结合物 包含了所有与XML语法结合的HTML 4.01元素 XHTML 指可扩展超文本标签语言(EXtensible HyperText Markup ...
- gulp的使用介绍及技巧
gulp的使用介绍及技巧 转载: https://www.cnblogs.com/2050/p/4198792.html 1.gulp的安装 首先确保你已经正确安装了nodejs环境.然后以全局方式安 ...
- 彻底弄懂JS事件委托的概念和作用
一.写在前头 接到某厂电话问什么是事件代理的时候,一开始说addEventListener,然后他说直接绑定新的元素不会报dom不存在的错误吗?然后我就混乱了,我印象中这个方法是可以绑定新节点的 ...
- _itemmod_add
命令._add items XXX 为目标添加一组物品 `comment` 备注 `categoryId` 组ID `entry` 物品entry `count`数量
- uoj #228. 基础数据结构练习题 线段树
#228. 基础数据结构练习题 统计 描述 提交 自定义测试 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的 ...
- 使用fiddler轻轻松松制造客户端接口time out的情况
1.打开fiddler,过滤出你想要的请求 2.复制出你想要中断的请求 3.设置中断这个请求,bpu+请求,回车(详情请百度fiddle默认命令) 4.ctrl+x(清楚所有的请求),刷新页面,重新获 ...
- curl java 模拟http请求
curl java 模拟http请求 直接上代码: public static void main(String args[]) throws Exception { String url = &qu ...