pandas有两种自己独有的基本数据结构Series和DataFrame

Series

数据结构
data 100 300 500
index 0 1 2
或者
index data
0 100
1 300
2 500
创建series对象

In [1]: import numpy as np
In [2]: from pandas import Series,DataFrame
In [3]: import pandas as pd 传递list创建对象,默认创建整数索引
In [4]: s1 = Series([1,3,6,-1,2,8])
In [5]: s1
Out[5]:
0 1
1 3
2 6
3 -1
4 2
5 8
dtype: int64 传入列表自定义索引创建对象
In [9]: s2 = Series([1,3,6,-1,2,8],index = ["a","c","d","e","b","g"])
In [10]: s2
Out[10]:
a 1
c 3
d 6
e -1
b 2
g 8
dtype: int64 传入字典创建对象
In [11]: SD = {"python":100,"java":101,"scala":102}
In [12]: s3 = Series(SD)
In [14]: s3
Out[14]:
java 101
python 100
scala 102
dtype: int64 //显示数据值【values】和索引【index】
In [6]: s1.values
Out[6]: array([ 1, 3, 6, -1, 2, 8])
In [7]: s1.index
Out[7]: RangeIndex(start=0, stop=6, step=1) In [17]: s1
Out[17]:
0 1
1 3
2 6
3 -1
4 2
5 8
dtype: int64 自定义索引名字
In [18]: s1.index = ["p1","p2","p3","p4","p5","p6"]
In [19]: s1
Out[19]:
p1 1
p2 3
p3 6
p4 -1
p5 2
p6 8
dtype: int64 根据索引查看值和修改值
In [20]: s1['p1']
Out[20]: 1
In [21]: s1['p1']=100
In [22]: s1
Out[22]:
p1 100
p2 3
p3 6
p4 -1
p5 2
p6 8
dtype: int64 判断值是否为空
In [29]: pd.isnull(s1)
Out[29]:
p1 False
p2 False
p3 False
p4 False
p5 False
p6 False
dtype: bool In [30]: pd.notnull(s1)
Out[30]:
p1 True
p2 True
p3 True
p4 True
p5 True
p6 True
dtype: bool 运算
In [31]: s2
Out[31]:
a 1
c 3
d 6
e -1
b 2
g 8
dtype: int64
In [32]: s2[s2>5]
Out[32]:
d 6
g 8
dtype: int64 In [33]: s2*10
Out[33]:
a 10
c 30
d 60
e -10
b 20
g 80
dtype: int64

DataFrame

DataFrame几要素:index、columns、values等

通过传递一个list对象来创建一个Series,pandas会默认创建整形索引
In [34]: s = pd.Series([1,3,5,np.nan,6,8])
In [35]: s
Out[35]:
0 1.0
1 3.0
2 5.0
3 NaN
4 6.0
5 8.0
dtype: float64 通过传递一个numpy array,时间索引以及列标签创建DataFrame
In [48]: dates = pd.date_range("20170101",periods = 6) In [49]: df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list("ABCD")) In [50]: df
Out[50]:
A B C D
2017-01-01 0.198724 1.455237 -1.165803 -0.474382
2017-01-02 0.622154 -0.280253 -0.492515 0.002470
2017-01-03 1.764839 -1.734531 -0.195002 0.128216
2017-01-04 -0.520130 1.372930 -2.240510 0.362139
2017-01-05 1.530835 0.406480 -1.714226 -0.289591
2017-01-06 0.675166 0.210024 -0.773319 -1.410746
In [51]: dates
Out[51]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06'],
dtype='datetime64[ns]', freq='D') d1=DataFrame(np.arange(12).reshape((3,4)),index=['a','b','c'],columns=['a1','a2','a3','a4']) 比较常用的有导入等长列表、字典、numpy数组、数据文件等
In [61]: data = {'name':['zxx','lxx','gxx','hxx'],'age':[12,13,14,15],'addr':['JX','JS','BJ','SH']}
字典数据转换为DataFrame,并指定索引
In [62]: d2 = DataFrame(data)
In [63]: d2
Out[63]:
addr age name
0 JX 12 zxx
1 JS 13 lxx
2 BJ 14 gxx
3 SH 15 hxx In [64]: d3 = DataFrame(data,columns=['name','age','addr'],index=['a','b','c','d'])
In [65]: d3
Out[65]:
name age addr
a zxx 12 JX
b lxx 13 JS
c gxx 14 BJ
d hxx 15 SH df.dtypes 查看不同列的数据类型
df.Tab键 自动识别所有属性及自定义列
df.head(2) 查看前两行
df.tail(2) 查看尾部两行
df.index 查看索引值
df.columns 查看列名
df.values 查看底层numpy数据 In [56]: df.head(2)
Out[56]:
A B C D
2017-01-01 0.198724 1.455237 -1.165803 -0.474382
2017-01-02 0.622154 -0.280253 -0.492515 0.002470 In [57]: df.tail(2)
Out[57]:
A B C D
2017-01-05 1.530835 0.406480 -1.714226 -0.289591
2017-01-06 0.675166 0.210024 -0.773319 -1.410746 In [58]: df.index
Out[58]:
DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
'2017-01-05', '2017-01-06'],
dtype='datetime64[ns]', freq='D') In [59]: df.columns
Out[59]: Index([u'A', u'B', u'C', u'D'], dtype='object') In [60]: df.values
Out[60]:
array([[ 0.19872446, 1.45523672, -1.16580285, -0.47438238],
[ 0.62215406, -0.28025262, -0.49251531, 0.00247041],
[ 1.76483913, -1.73453082, -0.19500168, 0.12821624],
[-0.52013049, 1.37292972, -2.24051045, 0.36213914],
[ 1.53083459, 0.40647992, -1.71422601, -0.28959076],
[ 0.67516588, 0.2100239 , -0.77331882, -1.41074624]])

获取数据

In [71]: d3=DataFrame(data,columns=['name','age','addr'],index=['a','b','c','d'])

In [72]: d3
Out[72]:
name age addr
a zhanghua 40 jianxi
b liuting 45 pudong
c gaofei 50 beijing
d hedong 46 xian 选择列
In [78]: d3[['name','age']]
Out[78]:
name age
a zhanghua 40
b liuting 45
c gaofei 50
d hedong 46 选择行
In [84]: d3['a':'c']
Out[84]:
name age addr
a zhanghua 40 jianxi
b liuting 45 pudong
c gaofei 50 beijing 选择行(利用位置索引)
In [87]: d3[1:3]
Out[87]:
name age addr
b liuting 45 pudong
c gaofei 50 beijing 使用过滤条件
In [90]: d3[d3['age']>40]
Out[90]:
name age addr
b liuting 45 pudong
c gaofei 50 beijing
d hedong 46 xian obj.ix[indexs,[columns]]可以根据列或索引同时进行过滤
In [91]: d3.ix[['a','c'],['name','age']]
Out[91]:
name age
a zhanghua 40
c gaofei 50 In [93]: d3.ix['a':'c',['name','age']]
Out[93]:
name age
a zhanghua 40
b liuting 45
c gaofei 50 In [94]: d3.ix[0:3,['name','age']]
Out[94]:
name age
a zhanghua 40
b liuting 45
c gaofei 50

修改数据

In [95]: data={'name':['zhanghua','liuting','gaofei','hedong'],'age':[40,45,50,46],'addr':['jianxi','pudong','beijing','xian']}

In [96]: d3=DataFrame(data,columns=['name','age','addr'],index=['a','b','c','d'])

删除行
In [97]: d3.drop('d',axis=0)
Out[97]:
name age addr
a zhanghua 40 jianxi
b liuting 45 pudong
c gaofei 50 beijing 删除列
In [99]: d3.drop('age',axis=1)
Out[99]:
name addr
a zhanghua jianxi
b liuting pudong
c gaofei beijing
d hedong xian 添加一行,注意需要ignore_index=True
In [103]: d4 = d3.append({'name':'wxx','age':38,'addr':'HN'},ignore_index=True) In [104]: d4
Out[104]:
name age addr
0 zhanghua 40 jianxi
1 liuting 45 pudong
2 gaofei 50 beijing
3 hedong 46 xian
4 wxx 38 HN In [105]: d4.ix['4','age']=100 In [106]: d4
Out[106]:
name age addr
0 zhanghua 40.0 jianxi
1 liuting 45.0 pudong
2 gaofei 50.0 beijing
3 hedong 46.0 xian
4 wxx 38.0 HN
4 NaN 100.0 NaN 修改索引
In [111]: d3.index=['a','b','c','d'] In [112]: d3
Out[112]:
name age addr
a zhanghua 40 jianxi
b liuting 45 pudong
c gaofei 50 beijing
d hedong 46 xian

汇总统计

常用统计方法
count 统计非NA的数量
describe 统计列的汇总信息
min、max 计算最小值和最大值
sum 求总和
mean 求平均数
var 样本的方差
std 样本的标准差 导入和保存数据
读取csv文件/或者逗号分隔的txt文件
pd.read_csv('wu.csv')
读取HDFS数据
pd.read_hdf('wu.h5',df)
写入为csv文件
df.to_csv('wu.csv')
写入HDF5存储
df.to_hdf('wu.h5','df') In [15]: inputfile = '/home/hadoop/wujiadong/wu1_stud_score.txt'
In [16]: data = pd.read_csv(inputfile)
In [40]: df = DataFrame(data)
In [41]: df.head(3)
Out[41]:
stud_code sub_code sub_name sub_tech sub_score stat_date
0 2015101000 10101 数学分析 NaN 90 0000-00-00
1 2015101000 10102 高等代数 NaN 88 0000-00-00
2 2015101000 10103 大学物理 NaN 67 0000-00-00 In [42]: df.count()
Out[42]:
stud_code 121
sub_code 121
sub_name 121
sub_tech 0
sub_score 121
stat_date 121
dtype: int64 In [43]: df['sub_score'].describe()
Out[43]:
count 121.000000
mean 78.561983
std 12.338215
min 48.000000
25% 69.000000
50% 80.000000
75% 89.000000
max 98.000000
Name: sub_score, dtype: float64 求学生成绩标准差
In [44]: df['sub_score'].std()
Out[44]: 12.338214729032906

应用函数和映射

In [45]: d1 = DataFrame(np.arange(12).reshape((3,4)),index=['a','b','c'],columns=['a1','a2','a3','a4'])

In [46]: d1
Out[46]:
a1 a2 a3 a4
a 0 1 2 3
b 4 5 6 7
c 8 9 10 11 处理每个元素
In [47]: d1.applymap(lambda x:x+2)
Out[47]:
a1 a2 a3 a4
a 2 3 4 5
b 6 7 8 9
c 10 11 12 13 处理行数据
In [54]: d1.ix[1].map(lambda x:x+2)
Out[54]:
a1 6
a2 7
a3 8
a4 9
Name: b, dtype: int64 列级处理
In [62]: d1.apply(lambda x:x.max()-x.min(),axis=0)
Out[62]:
a1 8
a2 8
a3 8
a4 8
dtype: int64

参考资料

1)10 Minutes to pandas:

http://pandas.pydata.org/pandas-docs/stable/10min.html

2)十分钟搞定pandas:

http://www.cnblogs.com/chaosimple/p/4153083.html

3)Pandas使用:

https://github.com/qiwsir/StarterLearningPython/blob/master/311.md

4)python cookbook:

http://pandas.pydata.org/pandas-docs/stable/cookbook.html#cookbook

Pandas学习1的更多相关文章

  1. 用scikit-learn和pandas学习线性回归

    对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了. 1. 获取数据,定义问题 没有数据,当然没法研究机器学习 ...

  2. Pandas 学习笔记

    Pandas 学习笔记 pandas 由两部份组成,分别是 Series 和 DataFrame. Series 可以理解为"一维数组.列表.字典" DataFrame 可以理解为 ...

  3. Python pandas学习总结

    本来打算学习pandas模块,并写一个博客记录一下自己的学习,但是不知道怎么了,最近好像有点急功近利,就想把别人的东西复制过来,当心沉下来,自己自觉地将原本写满的pandas学习笔记删除了,这次打算写 ...

  4. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...

  5. pandas学习(创建多层索引、数据重塑与轴向旋转)

    pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...

  6. pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)

    pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...

  7. pandas学习(创建数据,基本操作)

    pandas学习(一) Pandas基本数据结构 Series类型数据 Dataframe类型 基本操作 Pandas基本数据结构 两种常用数据结构: Series 一维数组,与Numpy中的一维ar ...

  8. pandas 学习总结

    pandas  学习总结 作者:csj 更新时间:2018.04.02 shenzhen email:59888745@qq.com home: http://www.cnblogs.com/csj0 ...

  9. 用 scikit-learn 和 pandas 学习线性回归

      用 scikit-learn 和 pandas 学习线性回归¶ from https://www.cnblogs.com/pinard/p/6016029.html 就算是简单的算法,也需要跑通整 ...

  10. pandas学习系列(一):时间序列

    最近参加了天池的一个机场航空人流量预测大赛,需要用时间序列来预测,因此开始使用python的pandas库 发现pandas库功能的确很强大,因此在这记录我的pandas学习之路. # -*- cod ...

随机推荐

  1. python学习笔记(二十三)私有方法和私有属性

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Person类的定义来看,外部代码还是可以自由地修改一个实例的nam ...

  2. PAT 1122 Hamiltonian Cycle[比较一般]

    1122 Hamiltonian Cycle (25 分) The "Hamilton cycle problem" is to find a simple cycle that ...

  3. CentOS 7 安装vsftpd 服务器

    在CentOS7上安装ftp服务器用于保存服务端上传的图片. 1.CentOS卸载vsftpd的方法 如果服务器上已经安装了vsftpd服务,配置出错需要卸载vsftpd服务. 1.1 查找vsftp ...

  4. epson Robot 指令集合

    ******************************************************************* 目的:定义一个整型数据 原型:Integer varName[( ...

  5. Angular 笔记系列(二)数据绑定

    数据绑定这块儿没啥说的,简单两个例子带过了. Hello World: <!DOCTYPE html> <html ng-app> <head> <title ...

  6. 转载 C#开发串口总结,并提炼串口辅助类到公用类库中

    C#开发串口总结,并提炼串口辅助类到公用类库中 开发C#相关的项目有很多年了,一直没有接触串口的开发,近期由于工作的需要,需要了解熟悉对硬件串口的开发,通过对串口的深入了解,串口也不再是什么神秘的东西 ...

  7. XE6移动开发环境搭建之IOS篇(2):安装虚拟机(有图有真相)

    XE6移动开发环境搭建之IOS篇(2):安装虚拟机(有图有真相) 2014-08-15 22:04 网上能找到的关于Delphi XE系列的移动开发环境的相关文章甚少,本文尽量以详细的内容.傻瓜式的表 ...

  8. PHP实现excel导出

    首先去下载PHPExcel类,地址http://phpexcel.codeplex.com/ 方法如下第一步引入这个扩展类 Vendor('PHPExcel'); 第二部就是方法了,下面简单的实现方法 ...

  9. .net操作xml文件(新增.修改,删除,读取) 转

    今天有个需求需要操作xml节点.突然见遗忘了许多.上网看了些资料.才整出来.脑袋真不够用.在这里把我找到的资料共享一下.方便以后使用.本文属于网摘/ 1 一.简单介绍2 using System.Xm ...

  10. 某个php爬虫程序分析--来自wooyun

    乌云漏洞编号: WooYun-2014-68061 作者:hkAssassin 爬虫程序源码: <?php header("content-type:text/html;charset ...