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. SQL Server 常用分页SQL(转)

    发现网上好多都是错的.网上经常查到的那个Top Not in 或者Max 大部分都不实用,很多都忽略了Order和性能问题.为此上网查了查,顺带把2000和2012版本的也补上了. 先说说网上常见SQ ...

  2. etcd: request cluster ID mismatch错误解决【只适用于新建etcd集群或无数据集群】

    1.报错信息 Mar 29 05:45:31 xxx etcd: request cluster ID mismatch (got 414f8613693e2e2 want cdf818194e3a8 ...

  3. iftop linux监控工具安装使用

    Linux中查看网卡流量工具有iptraf.iftop以及nethogs等,iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等. 安装iftop的命令如下: CentO ...

  4. python爬虫 (一) 爬虫基础了解,urllib

    • URL的含义: 统一资源定位符,结构: URL的格式由三部分组成: ①第一部分是协议(或称为服务方式). ②第二部分是存有该资源的主机IP地址(有时也包括端口号). ③第三部分是主机资源的具体地址 ...

  5. go-008-循环语句

    一.循环语句[只有for] 1.基础结构: Go语言的For循环有3中形式,只有其中的一种使用分号. 和 C 语言的 for 一样: for init; condition; post { } 和 C ...

  6. MySQL基础命令

    目录: MySQL概述 安装及启动登陆mysql操作 MySQL基本数据类型 MySQL数据库基本SQL操作 MySQL高级SQL操作 一.MySQL概述 1.什么是数据库? 数据库(Database ...

  7. ambari rest api (修改集群配置文件)

    1.找到你需要修改的配置的最新版本 curl -u admin:admin -H "X-Requested-By: ambari" -X GET http://AMBARI_SER ...

  8. SSH查看Linux系统是32位还是64位?

    Linux下如何明确地查看操作系统的位数   如何知晓操作系统是32位还是64位?这里介绍一种简单的方式: [root@localhost mysql-5.1.57]# getconf LONG_BI ...

  9. 03 linux命令的操作

    开启Linux操作系统,要求以root用户登录GNOME图形界面,语言支持选择为汉语 使用快捷键切换到虚拟终端2,使用普通用户身份登录,查看系统提示符 使用快捷键切换到虚拟终端5,使用管理员身份登录, ...

  10. Linux系统——文件和目录权限

    文件及目录权限(七进制表示) r  读权限(4),允许查看文件内容 w 写权限(2),允许修改文件内容 x  可执行权限(1),允许运行程序 - 无权限(0) 属主:拥有该文件的用户账号 属组:拥有该 ...