Python数据处理进阶——pandas
对于python进行数据处理来说,pandas式一个不得不用的包,它比numpy很为强大。通过对《利用python进行数据分析》这本书中介绍pandas包的学习,再加以自己的理解,写下这篇随笔,与一起喜欢数据分析的朋友分享和相互学习。
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
# 函数反应和映射
df = DataFrame(np.random.randn(4,3), columns= list("bde"),
index= ["Utah", "Ohio", "Texas", "Oregon"])
# print df
# print np.abs(df)
# 将函数应用到各列或行所形成的一维数组上。
f = lambda x : x.max() - x.min()
# 每一列的最大值减最小值
# print df.apply(f, axis=0)
# 每一行的最大值减最小值
# print df.apply(f, axis=1)
# 返回值由多个值组成的Series
def f(x):
return Series([x.min(), x.max()], index=["min","max"])
# print df.apply(f)
# 保留两位小数点
format = lambda x : "%.2f" % x
# print df.applymap(format)
# print df["e"].map(format) # 排序和排名
obj = Series(np.arange(4.), index=["b","a","d","c"])
# print obj.sort_index()
frame = DataFrame(np.arange(8).reshape((2,4)),index=["three","one"],
columns=["d",'a','b','c'])
# 按照索引的行进行排序
# print frame.sort_index(axis=1)
# 按照索引的列进行排序
# print frame.sort_index(axis=0)
# 按照值的列进行排序(必须传入一个列的索引且只能排列一组)
# print frame.sort_values('b', axis=0, ascending=False)
# 按照值的行进行排序(必须传入一个行的索引且只能排列一组)
# print frame.sort_values("one", axis=1, ascending=False)
# 根据多个列进行排序
# print frame.sort_index(by=["a","b"]) # 排名
obj1 = Series([7,-5,7,4,2,0,4])
# print obj1.rank() # 加减乘除 add代表加,sub代表减, div代表除法, mul代表乘法
df1 = DataFrame(np.arange(12).reshape((3,4)), columns=list("abcd"))
df2 = DataFrame(np.arange(20).reshape((4,5)), columns=list("abcde")) # print df1 + df2
# 将缺失值用0代替
# print df1.add(df2, fill_value=0)
# 再进行重新索引时,也可以指定一个填充值
# print df1.reindex(columns=df2.columns, fill_value=0) data = {"state": ["Ohio","Ohio","Ohio","Nevada","Nevada"],
"year" : [2000, 2001, 2002, 2001, 2002],
"pop" : [1.5, 1.7, 3.6, 2.4, 2.9]}
frame = DataFrame(data)
# print frame
# 矩阵的横坐标
# print frame.columns
# 矩阵的纵坐标
# print frame.index
# 获取列通过类似字典标记的方式或属性的方式,可以将DataFrame的列获取为一个Series:
# print frame["state"]
# print frame.year
# 获取行也通过类似字典标记的方式或属性的方式,比如用索引字段ix
# print frame.ix[3]
# 修改列的内容
frame["debt"] = 16.5
# print frame
# 精准匹配
val = Series([-1.2, -1.5, -1.7], index=["two", "four", "five"])
frame.index = Series(['one', 'two', 'three', 'four', 'five'])
frame.debt = val
# print frame
# 为不存在的列赋值存在列中的某个值会创建出一个布尔列。关键字del用于删除列。
frame["eastern"] = frame.state == "Ohio"
# print frame
del frame["eastern"] # 只能这样表示
# print frame
# 嵌套字典
pop = { "Nevada" : {2001 : 2.4, 2002 : 2.9},
"Ohio" : {2000 : 1.5, 2001 : 1.7, 2002 : 3.6}
}
# 传给DataFrame,它会被解释为:外层字典的键作为列,内层键则作为行索引
frame2 = DataFrame(pop)
# print frame2
# 对该结果进行转置
# print frame2.T
# 内层字典的键会被合并、排序以形成最终的索引。
frame3 = DataFrame(pop, index=[2001, 2002, 2003])
# print frame3
frame3.index.name = "year"; frame3.columns.name = "state"
# print frame3 # 重新索引
obj = Series([4.5, 7.2, -5.3, 3.6], index=["d", "b", "a", "c"])
# reindex将会根据新索引进行重排。
obj2 = obj.reindex(["a", "b", "c", "d", "e"])
# print obj2
# 将缺失值用0代替
obj2 = obj.reindex(["a", "b", "c", "d", "e"], fill_value= 0)
# print obj2 # 插值处理--Series
obj3 = Series(["blue", "purple", "yellow"], index=[0,2,4])
# 前向填充ffill或pad
a = obj3.reindex(xrange(6), method="ffill")
# print a
# 后向填充bfill或backfill
b = obj3.reindex(xrange(6), method="bfill")
# print b # 插值处理--DataFrame
import numpy as np
f = DataFrame(np.arange(9).reshape((3,3)), index=["a","c","d"],
columns=["Ohio", "Texas", "California"])
# 改变行的索引
f2 = f.reindex(["a","b","c","d"], fill_value=9)
# print f2
# 改变列的索引
col = ["Texas", "Utah", "California"]
f3 = f.reindex(columns=col)
# print f3
# 同时改变列和行的索引
f4 = f.reindex(["a","b","c","d"], method="ffill",
columns=["Texas", "Utah", "California"])
# print f4 # 丢弃指定轴上的项--Series
mys = Series(np.arange(5.), index=["a","b","c","d","e"])
# print mys
# drop()删除某个索引以及对应的值
mys_new = mys.drop("c")
# print mys_new
mys_new1 = mys.drop(["c","e"])
# print mys_new1 # 丢弃指定轴上的项--DataFrame
data = DataFrame(np.arange(16).reshape((4,4)),
index=["Ohio", "Colorado", "Utah", "New York"],
columns=["one", "two", "three", "four"])
# 删除某行轴上的值
data1 = data.drop(["Ohio","Utah"], axis=0) # axis=0代表行
# print data1
# 删除某列轴上的值
data2 = data.drop(["one","three"], axis=1) # axis=1代表列
# print data2 obj = Series(range(5), index=['a', 'a', 'b', 'b', 'c'])
# 使用is_unique属性可以知道他的值是否是唯一的
print obj.index.is_unique
# obj['a']
df = DataFrame(np.random.randn(4, 3), index=['a', 'b', 'a', 'b'])
print df.ix["b", 1]
print df[1]
pandas中的索引高级处理:
from pandas import Series, DataFrame
import pandas as pd
import numpy as np
# 索引、选取和过滤--Series
obj = Series(np.arange(4), index=["a","b","c","d"])
# print obj["b"]
# print obj[1]
# print obj[2:4]
# print obj[["b","a","d"]]
# print obj[[1,3]]
# print obj[obj < 2]
# 利用标签的切片运算与普通的python切片运算不同,其末端是包含的
# print obj["b":"c"]
obj["b":"c"] = 5
# print obj # 索引、选取和过滤--DataFrame
data = DataFrame(np.arange(16).reshape((4, 4)),
index=["Ohio", "Colorado", "Utah", "New York"],
columns=["one", "two", "three", "four"])
# 选取某列的值
# print data["two"]
# 选取多个列的值
# print data[["two","one"]]
# 通过切片或布尔型数组选取行的值
a = data[:2]
b = data[data["three"] > 5]
# data[data < 5] = 0
# print data
# 选取出列和行的值,用ix[行,列]
c = data.ix["Ohio","two"]
# print c, data
# print data.ix["Ohio",["two","three"]]
# 可以用数字代替列的轴
# print data.ix[["Ohio","Colorado"],[3,0,1]]
# 也可以用数字代替行的轴
# print data.ix[[0,1],[3,0,1]]
d = data.ix[:"Utah", "two"]
# 行中每个值大于5且前三列的值
e = data.ix[data.three > 5, :3]
# print e # Series的字符串表现形式为:索引在左边,值在右边。如果没有指定索引,那么默认从0到(N-1)的整数型索引。
# 可以通过values和index属性获取数组的形式和索引。
obj = Series([2,3,-6,7])
# print obj
# print obj.values
# print obj.index
obj2 = Series([2,3,-6,7],index=["d","b","a","c"])
# print obj2.index
# print obj2["a"]
obj2["d"] = 6
# print obj2[["c","a","d"]]
# print obj2[obj2 > 0 ]
# print obj2 * 2
# print np.exp(obj2)
sdata = {"Ohio" : 35000, "Texas" : 71000, "Oregon" : 16000, "Utah" : 5000}
# 直接用字典建立数组
obj3 = Series(sdata)
# 如果只传入一个字典,则结果Series中的索引就是原字典的键。
states = ["California","Ohio","Oregon","Texas"]
obj4 = Series(sdata, index=states)
# 上述obj4中California在对应的sdata中找不到对应值,所以用NaN表示(缺失值)
# 检测是否有缺失值。
pd.isnull(obj4)
pd.notnull(obj4)
obj4.isnull()
# Series最重要的一个功能是:它在算术运算中会自动对齐不同的索引的数据。
# print obj3 + obj4 # Series对象和索引都有一个name属性,该属性跟pandas其他的关键功能关系非常密切:
obj4.name = "population"
obj4.index.name = "state"
# print obj4
# Series的索引可以通过赋值的方式就地修改
obj.index = ["Bob","Steve","Jeff","Ryan"]
print obj
用pandas包进行简单的统计学计算:
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
df = DataFrame([[1.4, np.nan], [7.1, -4.5],
[np.nan, np.nan],[0.75, -1.3]],
index=['a','b','c','d'],
columns=["one","two"])
# print df.sum()
# 传入axis=1将会按行进行求和运算
# print df.sum(axis=1)
# NA值会自动被排除,除非整个切片是NA值。可以通过skipna选项禁止这种功能
d = df.mean(axis=1, skipna=False)
f = lambda x : "%.2f" % x
# print d.apply(f) # 统计
# 间接统计
# print df.idxmax()
# 累计型统计(前一项加后一项)
# print df.cumsum()
# 一次性汇总统计
# print df.describe()
# print df.min(axis=1) # 计算相关系数和协方差 obj = DataFrame(np.random.randn(5,4),
index=["2009-12-24","2009-12-28","2009-12-29","2009-12-30","2009-12-31"],
columns=["AAPL","GOOG","IBM","MSFT"])
obj.index.name = "Data"
# print obj
# index 代表行, columns 代表列
# corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相对系数。cov用于计算协方差:
# print obj.MSFT.corr(obj.IBM)
# print obj.MSFT.cov(obj.IBM)
# 用于DataFrame的corr和cov
# 相关系数
# print obj.corr()
# 协方差
# print obj.cov()
# 按列或行跟一个Series或Data Frame之间的相关系数
# axis=1进行行进行计算
# print obj.corrwith(obj.IBM) # 唯一值
obj1 = Series(["c",'a','d','a','a','b','b','c','c'])
uniques = obj1.unique()
# 加排序
# print uniques.sort()
# 计算出现的频率
print obj1.value_counts()
Python数据处理进阶——pandas的更多相关文章
- Python 数据处理库pandas教程(最后附上pandas_datareader使用实例)
0 简单介绍 pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库.本文是对它的一个入门教程. pandas提供了快速,灵活和富有 ...
- Python 数据处理库 pandas 入门教程
Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 进阶教程
数据访问 在入门教程中,我们已经使用过访问数据的方法.这里我们再集中看一下. 注:这里的数据访问方法既适用于Series,也适用于DataFrame. **基础方法:[]和. 这是两种最直观的方法,任 ...
- python 数据处理学习pandas之DataFrame
请原谅没有一次写完,本文是自己学习过程中的记录,完善pandas的学习知识,对于现有网上资料的缺少和利用python进行数据分析这本书部分知识的过时,只好以记录的形势来写这篇文章.最如果后续工作定下来 ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 入门教程
入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...
- Python 数据处理库 pandas
核心数据结构 pandas最核心的就是Series和DataFrame两个数据结构. 名称 维度 说明 Series 1维 带有标签的同构类型数组 DataFrame 2维 表格结构,带有标签,大小可 ...
- python数据处理工具 -- pandas(序列与数据框的构造)
Pandas模块的核心操作对象就是对序列(Series)和数据框(Dataframe).序列可以理解为数据集中的一个字段,数据框是值包含至少两个字段(或序列) 的数据集. 构造序列 1.通过同质的列表 ...
- 学习推荐《从Excel到Python数据分析进阶指南》高清中文版PDF
Excel是数据分析中最常用的工具,本书通过Python与Excel的功能对比介绍如何使用Python通过函数式编程完成Excel中的数据处理及分析工作.在Python中pandas库用于数据处理,我 ...
- Python数据分析之pandas学习
Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...
随机推荐
- String to Integer (atoi) leetcode
Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input cases. ...
- &&运算符,三木运算符与React的条件渲染
在使用react框架的时候中往往会遇到需要条件渲染的情形,这时候,许多人会设想采用if语句来实现,比如下面,当满足条件condition时,conditonRender渲染组件ComponentA,当 ...
- Redis 安装与简单使用
安装 Redis 一般系统都会有软件管理工具,但是通常版本都不会太新,况且 Redis 的安装很简单,因此下面使用源码的安装方式. 下载源码 wget http://download.redis.io ...
- 关于百度地图js api的getCurrentPosition定位不准确的解决方法
很久之前帮大叔解决了一个gps坐标转换为百度地图坐标的问题.今天大叔又给我讲百度地图定位不准.我查了一下api,用了官方给出的这样一组函数. //创建查询对象 var geolocation = ne ...
- 2751: [HAOI2012]容易题(easy)
2751: [HAOI2012]容易题(easy) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1087 Solved: 477[Submit][ ...
- 一段从TXT导入excel的py脚本
#创建文件file = Workbook(encoding='utf-8')#创建sleettableTotalTime = file.add_sheet('TotalTime')#每列给出名称tab ...
- 深入浅出数据结构C语言版(5)——链表的操作
上一次我们从什么是表一直讲到了链表该怎么实现的想法上:http://www.cnblogs.com/mm93/p/6574912.html 而这一次我们就要实现所说的承诺,即实现链表应有的操作(至于游 ...
- Struts2之标签使用
上一篇我们一起探讨了Struts2中的OGNL表达式的知识,本篇我们一起来学习一下关于Struts2标签的使用,包括:基础标签:property.set.bean.include:判断标签:if el ...
- Servlet实现的三种方式
实现Servlet的三种方式:一个实现,两个继承 /*========================================== * servlet的执行过程: * 1.创建servlet对 ...
- window7使用svn(svn系列 客户端 知识二总结)
♣eclipse插件subclipse ♣TortoiseSVN ♣svn操作 ♣注意事项 使用svn可以在eclipse直接装subclipse或者在windows使用TortoiseSVN ...