参考: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内容的更多相关文章

  1. 【原】十分钟搞定pandas

    http://www.cnblogs.com/chaosimple/p/4153083.html 本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译 ...

  2. 十分钟搞定 pandas

    原文:http://pandas.pydata.org/pandas-docs/stable/10min.html 译者:ChaoSimple 校对:飞龙 官方网站上<10 Minutes to ...

  3. 十分钟搞定pandas

    转至:http://www.cnblogs.com/chaosimple/p/4153083.html 本文是对pandas官方网站上<10 Minutes to pandas>的一个简单 ...

  4. 【Python笔记】十分钟搞定pandas

    本文是对pandas官方网站上<10 Minutes to pandas>的一个简单的翻译,原文在这里.这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook .习惯 ...

  5. 【转】十分钟搞定pandas

    原文链接:http://www.cnblogs.com/chaosimple/p/4153083.html 关于pandas的入门介绍,比较全,也比较实在,特此记录~ 还有关于某同学的pandas学习 ...

  6. 十分钟搞定CSS选择器

    在最近的web开发中是不是就会用到一些选择器,发现很多尤其是CSS3新增的不太熟悉,在此总结一下. 优先级 不同级别 1. 在属性后面使用 !important 会覆盖页面内任何位置定义的元素样式. ...

  7. (转)十分钟搞定CSS选择器

    原文地址:http://www.cnblogs.com/dolphinX/p/3347713.html 在最近的web开发中是不是就会用到一些选择器,发现很多尤其是CSS3新增的不太熟悉,在此总结一下 ...

  8. JAVA微信企业付款到零钱(十分钟搞定),附完整DEMO下载

    最近帮朋友做了一个简单的微分销系统,实现从企业付款到零钱分润的功能,简单记录一下微信企业付款到零钱的开发过程, 主要就是按规则封装好请求参数调用微信接口,涉及一些签名校验: A.接口流程 1. 获取用 ...

  9. 十分钟搞定微信企业帐号“echostr校验失败,请您检查是否正确解密并输出明文echostr”

    问题域:在这里我们只解决密文可以正确解密,但微信验证提示“echostr校验失败,请您检查是否正确解密并输出明文echostr”的问题. 干货:没有正确验证的原因是:你给微信返回的是字符串,而微信需要 ...

随机推荐

  1. Kibana --> Getting Started -->Building your own dashboard

    https://www.elastic.co/guide/en/kibana/6.6/tutorial-build-dashboard.html Building your own dashboard ...

  2. IDEA创建Maven Web项目

    简单介绍 本篇博客主要介绍使用IDEA如何创建Maven Web项目,具体是两个方面的内容:创建项目和配置tomcat服务器.前提是根据IDEA入门配置好了JDK及Maven. 创建项目 新建项目 填 ...

  3. (转) RNN models for image generation

    RNN models for image generation MARCH 3, 2017   Today we’re looking at the remaining papers from the ...

  4. 17秋 SDN课程 第五次上机作业

    17秋 SDN课程 第五次上机作业 Project:https://github.com/Wasdns/new_balance Slide is available at https://github ...

  5. 为DataGridView增加鼠标滚轮功能

    #region 鼠标滚动 [System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "Wi ...

  6. 【Python】【有趣的模块】【sys&time&os】

    [模块] sys.path.append('C:/Users/wangxue1/PycharmProjects/selenium2TestOne') 然后就可以直接import 这个路径下的模块了 [ ...

  7. 宠物属性控制_pet

    classIndex 职业索引 DmgAddPct 根据职业的法伤或攻强来计算宠物增加的物理伤害,增加的伤害值等于玩家法伤或攻强的百分比 SpAddPct 根据职业的法伤或攻强来计算宠物增加的法术伤害 ...

  8. Cannot find a valid baseurl for repo: base/7/x86_6 解决方法

    安装centos7后发现不能上网, sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=no改为ONBOOT=yes 然后重启网络服务 ...

  9. psql常用命令

    cmd命令 pg_ctl --version:查看pgsl版本 pg_ctl -D /xx/pgdata start:启动pgsl数据库 注:必须在环境变量中设置了PGDATA后才能省略-D参数 ,可 ...

  10. leecode第一百二十四题(二叉树中的最大路径和)

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode ...