Pandas学习1
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的更多相关文章
- 用scikit-learn和pandas学习线性回归
		
对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了. 1. 获取数据,定义问题 没有数据,当然没法研究机器学习 ...
 - Pandas 学习笔记
		
Pandas 学习笔记 pandas 由两部份组成,分别是 Series 和 DataFrame. Series 可以理解为"一维数组.列表.字典" DataFrame 可以理解为 ...
 - Python pandas学习总结
		
本来打算学习pandas模块,并写一个博客记录一下自己的学习,但是不知道怎么了,最近好像有点急功近利,就想把别人的东西复制过来,当心沉下来,自己自觉地将原本写满的pandas学习笔记删除了,这次打算写 ...
 - pandas学习(数据分组与分组运算、离散化处理、数据合并)
		
pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...
 - pandas学习(创建多层索引、数据重塑与轴向旋转)
		
pandas学习(创建多层索引.数据重塑与轴向旋转) 目录 创建多层索引 数据重塑与轴向旋转 创建多层索引 隐式构造 Series 最常见的方法是给DataFrame构造函数的index参数传递两个或 ...
 - pandas学习(常用数学统计方法总结、读取或保存数据、缺省值和异常值处理)
		
pandas学习(常用数学统计方法总结.读取或保存数据.缺省值和异常值处理) 目录 常用数学统计方法总结 读取或保存数据 缺省值和异常值处理 常用数学统计方法总结 count 计算非NA值的数量 de ...
 - pandas学习(创建数据,基本操作)
		
pandas学习(一) Pandas基本数据结构 Series类型数据 Dataframe类型 基本操作 Pandas基本数据结构 两种常用数据结构: Series 一维数组,与Numpy中的一维ar ...
 - pandas  学习总结
		
pandas 学习总结 作者:csj 更新时间:2018.04.02 shenzhen email:59888745@qq.com home: http://www.cnblogs.com/csj0 ...
 - 用 scikit-learn 和 pandas 学习线性回归
		
用 scikit-learn 和 pandas 学习线性回归¶ from https://www.cnblogs.com/pinard/p/6016029.html 就算是简单的算法,也需要跑通整 ...
 - pandas学习系列(一):时间序列
		
最近参加了天池的一个机场航空人流量预测大赛,需要用时间序列来预测,因此开始使用python的pandas库 发现pandas库功能的确很强大,因此在这记录我的pandas学习之路. # -*- cod ...
 
随机推荐
- 并发编程&数据库 - 考核题
			
第八章主要内容 第八章:线程.进程.队列.IO多路模型 操作系统工作原理介绍.线程.进程演化史.特点.区别.互斥锁.信号.事件.join.GIL.进程间通信.管道.队列. 生产者消息者模型.异步模型. ...
 - 原型模式(Prototype Pattern)--对象的克隆
			
定义:使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象; 原型类的核心在于如何实现克隆方法: 能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个类支持被复制; 通 ...
 - IPython的基本功能(转)
			
原文:http://kochiya.me/www/posts/Ipython!.html 前几天偶然在公司内网上拖了一本 Learning IPython for Interactive Comput ...
 - Python作用域-->闭包函数-->装饰器
			
1.作用域: 在python中,作用域分为两种:全局作用域和局部作用域. 全局作用域是定义在文件级别的变量,函数名.而局部作用域,则是定义函数内部. 关于作用域,我要理解两点:a.在全局不能访问到局部 ...
 - Data striping
			
条带化是把连续的数据分割成相同大小的数据块,把每段数据分别写入到阵列中的不同磁盘上的方法. 当多个进程同时访问一个磁盘时,可能会出现磁盘冲突.大多数磁盘系统都对访问次数(每秒的 I/O 操作,IOPS ...
 - confluence安装、破解+MariaDB驱动、汉化
			
下载所需文件:http://fansik.edusaas.com/confluence/安装包:atlassian-confluence-5.8.10-x64.bin 汉化包:Confluence-5 ...
 - Struts2 iterator标签实现嵌套循环
			
问题:有一个List<List<Object>> list用struts2在页面显示使用<s:iterator value=”list” var=”list1″> ...
 - 设置npm淘宝代理
			
来源:https://cnodejs.org/topic/4f9904f9407edba21468f31e 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在 ...
 - Linux环境下Netstat与PS的使用
			
Linux下用netstat查看网络状态.端口状态 在linux一般使用netstat 来查看系统端口使用情况步. netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际 ...
 - CTreeView 的教程
			
整个网上搜了一圈没有好的CTreeView 的教程,所以自己谢谢看. CTreeView 是什么? C打头的东西当然是一个类了. 有类就有继承,他的继承关系如下. 有个东西和他比较像 叫CTreeCt ...