Pandas

pandas是一个流行的开源Python项目,其名称取panel data(面板数据)与Python data analysis(Python 数据分析)之意。

pandas有两个重要的数据结构:DataFrame和Series

pandas数据结构之DataFrame

pandas的DataFrame数据结构是一种带标签的二维对象,与Excel的电子表格或者关系型数据表非常相似。

可以用下列方式来创建DataFrame:

1.从另一个DataFrame创建DataFrame

2.从具有二维形状的Numpy数组或者数组的复合结构来生成DataFrame

3.类似地,可以用pandas的另一种数据结构Series来创建DataFrame.关于Series,后文介绍

4.DataFrame也可以从类似CSV之类的文件来生成

考察pandas的DataFrame及其各种属性

(1)首先,将数据文件载入DataFrame,并显示其内容:

from pandas.io.parsers import read_csv

df=read_csv("WHO_first9cols.csv")
print("Dataframe",df)

(2)DataFrame有一个属性,以元组的形式来存放DataFrame的形状数据,这与ndarray非常相似,我们可以查询一个DataFrame的行数

print("shape",df.shape)
print("Length",len(df))

(3)下面通过其他属性来考察各列的标题与数据类型

print("Column Headers",df.columns)
print("Data types",df.dtypes)

(4)pandas的DataFrame带有一个索引,类似于关系型数据库中数据表的主键(primary key)。对于这个索引,我们既可以手动规定,也可以让pandas自动创建。访问索引时,使用相应的属性即可

print("Index",df.index)

(5)有时我们希望遍历DataFrame的基础数据,如果使用pandas的迭代器,遍历列值的效率可能会很低。更好的解决方案是从基础的Numpy数组中提取这些数值,然后进行相应的处理。不过,pandas的DataFrame的某一个属性可以在这方面为我们提供帮助

print("Values",df.values)

Pandas数据结构之Series

pandas的Series数据结构是由不同类型的元素组成的一维数组,该数据结构也具有标签。可以通过下列方式来创建pandas的Series数据结构。

1.由Python的字典来创建Series

2.由Numpy数组来创建Series

3.由单个标量来创建

创建Series数据结构时,可以向构造函数递交一组轴标签,这些标签通常称为索引,是一个可选参数。默认情况下,如果使用Numpy数组作为输入数据,那么pandas会将索引值从0开始递增。如果传递给构造函数的数据是一个Python字典,那么这个字典的键会经排序后变成相应的索引;如果输入数据是一个标量值,那么就需要由我们来提供相应的索引。索引中的每一个新值都要输入一个标量值。pandas的Series和DataFrame数据类型接口的特征和行为是从Numpy数组和Python字典那里借用来的

(1)首先,选中输入文件中的第一列,即Country列;然后显示这个对象在局部作用域中的类型

country_col=df["Country"]
print("Type df",type(df))
print("Type country col",type(country_col))

(2)pandas的Series数据结构不仅共享了DataFrame的一些属性,还另外提供了与名称有关的一个属性。

print("Series shape",country_col.shape)
print("Series index",country_col.index)
print("Series values”,country_col.values)
print("Series name",country_col.name)

(3)为了演示Series的切片功能,这里以截取Series变量Country中的最后两个国家为例进行说明

print("Last 2 countries",country_col[-2:])
print("Last 2 countries type",type(country_col[-2:]))

(4)Numpy的函数同样适用于pandas的DataFrame和Series数据结构

可以在DataFrame、Series和Numpy数组之间进行各种类型的数值运算。

利用pandas查询数据:

(1)head()和tail()这两个函数的作用类似于UNIX系统中同名的两个命令,即选取DataFrame的前n和后n个数据记录,其中n是一个整型参数:

print("Head 2",sunspots.head(2))
print("Tail 2",sunspots.tail(2))

(3)下面用最近的日期来查询最近一年太阳黑子的相关数据:

last_data=sunspots.index[-1]
print("Last value",sunspots.loc[last_date])

(4)下面介绍如何通过YYYYMMDD格式的日期字符串来查询日期,具体如下所示:

print(“Values slice by date”,sunspots[“20020101”:”20131231”])

(5)索引列表也可用于查询

print("Slice from a list of indices",sunspots.iloc[[2,4,-4,2]])

(6)要想选择标量值,有两种方法,这里给出的是速度明显占优势的第二种方法。它们需要两个整数作为参数,其中第一个整数表示行,第二个整数表示列:

print("Scalar with Iloc",sunspots.iloc[0,0])
print("Scalar with iat",sunspots.iat[1,0])

(7)查询布尔型变量的方法与SQL的Where子句非常接近

print("Boolean selection",sunspots[sunspots>sunspots.mean()])

利用pandas的DataFrame进行统计计算

pandas的DataFrame数据结构为我们提供了若干统计函数。

describe:这个方法将返回描述性统计信息

count:这个方法将返回非NaN数据项的数量

mad:这个方法用于计算平均绝对偏差,即类似于标准差的一个有力统计工具

median:这个方法用于返回中位数

min:这个方法将返回最小值

max:这个方法将返回最大值

mode:这个方法将返回众数

std:这个方法将返回标准差

var:这个方法将返回方差

skew:这个方法用来返回偏态系数,该系数表示的是数据分布的对称程度

kurt:这个方法将返回峰态系数,该系数用来反映数据分布曲线顶端尖峭或扁平程度

利用pandas的DataFrame实现数据聚合

(1)为Numpy的随机数生成器指定种子,以确保重复运行程序时生成的数据不会走样

import pandas as pd
from numpy.random import seed
from numpy.random import rand
from numpy.random import random_integers
import numpy as np
seed(42) df=pd.DataFrame({'Weather':['cold','hot','cold','hot','cold','hot','cold'],'Food':['soup','soup','icecream','chocolate','icecream','icecream','soup'],'Price':10*rand(7),'Number':random_integers(1,9,size=(7,))}) print(df)

(2)通过Weather 列为数据分组,然后遍历各组数据

weather_group=df.groupby('Weather')
i=0
for name,group in weather_group:
i=i+1
print("Group",i,name)
print(group)

(3)变量Weather_group是一种特殊的pandas对象,可由groupby()生成。这个对象为我们提供了聚合函数,下面展示它的使用方法:

print("Weather group first",weather_group.first())
print("Weather_group last",weather_group.last())
print("Weather_group mean",weather_group.mean())

(4)恰如利用数据库的查询操作那样,也可以针对多列进行分组

(5)通过agg()方法,可以对数据组施加一系列的Numpy函数

print("WF Aggregrated\n",weather_group.agg([np.mean,np.median]))

DataFrame的串联与附加操作

数据库的数据表有内部连接和外部连接两种连接操作类型。实际上,pandas的DataFrame也有类似的操作,因此我们也可以对数据行进行串联和附加。我们将使用前面章节中的DataFrame来练习数据行的串联和附加操作

函数concat()的作用是串联DataFrame,如可以把一个由3行数据组成的DataFrame与其他数据行串接,以便重建原DataFrame:

print("Concat Back together\n",pd.concat([df[:3],df[3:]]))

为了追加数据行,可以使用append()函数:

print("Appending rows\n",df[:3].append(df[5:]))

连接DataFrames

pandas提供的merge()函数或DataFrame的join()实例方法都能实现类似数据库的连接操作功能。默认情况下,join()实例方法会按照索引进行连接,不过,有时不符合我们的要求

虽然,pandas支持所有的这些连接类型(内部连接、左外连接、右外连接与完全外部连接等操作)

(1)用merge()函数按照员工编号进行连接处理

print("Merge() on key\n",pd.merge(dests,tips,on='EmpNr'))

(2)用join()方法执行连接操作时,需要使用后缀来指示左操作对象和右操作对象:

print("Dests join() tips\n",dests.join(tips,lsuffix='Dest',rsuffix='Tips'))

这个方法会连接索引值,因此得到的结果与SQL内部连接会有所不同

(3)用merge()执行内部连接时,更显式的方法如下所示:

print("Inner join with merge()\n",pd.merge(dests,tips,how='inner'))

只要稍作修改,就可以变成完全外部连接:

print("Outer join\n",pd.merge(dests,tips,how='outer'))

处理缺失数据问题

对于pandas来说,它会把缺失的数值标为NaN,表示None;还有一个类似的符号是NaT,不过它代表的是datetime64型对象。对NaN这个数值进行算数运算时,得到的结果还是NaN。

pandas的isnull()函数可以帮我们检查缺失的数据,使用方法如下。

print("Null values\n",pd.isnull(df))

类似地,可以用DataFrame的notnull()方法来考察非缺失数据:

print("Not Null Values\n",df.notnull())

通过fillna()方法,可以用一个标量(如0)来替换缺失数据,尽管有时可以用0替换缺失数据,但是事情并不总是如此

print("zero filled\n",df.fillna(0))

数据透视表

数据透视表可以从一个平面文件中指定的行和列中聚合数据,这种聚合操作可以是求和、求平均值、求标准差等运算

由于pandas API已经为我们提供了顶级pivot_table()函数以及相应的DataFrame方法,所以,只要设置好aggfunc参数,就可以让这个聚合函数来执行Numpy中诸如sum()之类的函数。参数cols用来告诉pandas要对哪些列进行聚合运算。

print(pd.pivot_table(df,cols=['Food'],aggfunc=np.sum))

《Python 数据分析》笔记——pandas的更多相关文章

  1. Python数据分析库pandas基本操作

    Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...

  2. python数据分析笔记——数据加载与整理]

    [ python数据分析笔记——数据加载与整理] https://mp.weixin.qq.com/s?__biz=MjM5MDM3Nzg0NA==&mid=2651588899&id ...

  3. Python数据分析之pandas基本数据结构:Series、DataFrame

    1引言 本文总结Pandas中两种常用的数据类型: (1)Series是一种一维的带标签数组对象. (2)DataFrame,二维,Series容器 2 Series数组 2.1 Series数组构成 ...

  4. Python 数据分析:Pandas 缺省值的判断

    Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...

  5. Python数据分析笔记

    最近在看Python数据分析这本书,随手记录一下读书笔记. 工作环境 本书中推荐了edm和ipython作为数据分析的环境,我还是刚开始使用这种集成的环境,觉得交互方面,比传统的命令行方式提高了不少. ...

  6. Python数据分析之Pandas操作大全

    从头到尾都是手码的,文中的所有示例也都是在Pycharm中运行过的,自己整理笔记的最大好处在于可以按照自己的思路来构建矿建,等到将来在需要的时候能够以最快的速度看懂并应用=_= 注:为方便表述,本章设 ...

  7. Python数据分析之pandas学习

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

  8. python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]

    1 引言 Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用.本文主要介绍Pandas的几种数据选取的方法. Pandas中,数据主要保存为Dataframe和Se ...

  9. Python数据分析之pandas

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

  10. python数据分析笔记中panda(1)

    1 例子1 from pandas import read_csv; df = read_csv('H://pythonCode//4.1//1.csv') df 截图 1.1 修改表的内容编码 df ...

随机推荐

  1. 采用CDN加速后,如何在程序里获取用户IP地址

    现在很多网站用了CDN技术,但采用CDN技术后,原来用来获取访问源的IP地址的程序已不能正常使用,它拿到的并不是访问源的真实IP地址,而是CDN节点的IP地址,解决方法是对获取IP的代码作一点小改动. ...

  2. 图像视频编码和FFmpeg(2)-----YUV格式介绍和应用

    本文不讲FFmpeg,而是讲YUV图像格式.因为摄像头拍摄出来的原始图像一般都是YUV格式.在FFmpeg中,视频是通过多张YUV图像而得到. YUV图像格式是什么,这个可以看一下维基百科.这个超链接 ...

  3. Android基础新手教程——4.4.1 ContentProvider初探

    Android基础新手教程--4.4.1 ContentProvider初探 标签(空格分隔): Android基础新手教程 本节引言: 本节给大家带来的是Android四大组件中的最后一个--Con ...

  4. MySQL获取Schema表名和字段信息

    MySQL获取Schema表名和字段信息 获取表名 select TABLE_NAME,TABLE_TYPE,ENGINE,TABLE_ROWS,TABLE_COMMENT,CREATE_TIME,U ...

  5. spring reactor记录操作日志

    1.注册日志的类: @Configuration@EnableReactorpublic class ReactorConfig { /** * * 〈注册审计日志 Reactor〉 */ @Bean ...

  6. 服务器操作系统应该选择Debian/Ubuntu还是CentOS?

    任何 Linux 发行版本,在理论上都是一样的.只不过操作有的方便,有的麻烦!yum 是比 apt 弱(这就是企业维护和社区维护的区别,企业自己维护不需要这么多功能)但是任何能在 A 发行版本上实现的 ...

  7. easy_UI datagrid view数据格式化

    从数据库中提取的信息,有时候需要后期处理一下,easy_ui给了我们很好的一个方法,根据easy_ui生成datagridview的两种方式,下面用两种方式来格式化显示数据信息 1,通过脚本生成的da ...

  8. 在CPU上运行Tensorflow

    如果你是用的GPU版本的Tensorflow,你可以这样来使用CPU版本的Tensorlfow: config = tf.ConfigProto( device_count = {'GPU': 0} ...

  9. python3----字符串中的字符倒转

    方法一,使用[::-1]: s = 'python' print(s[::-1]) 方法二,使用reverse()方法: n = list(s) n.reverse() print(''.join(n ...

  10. Unity3d 游戏退出界面1

    功能需求:点击退出按钮,弹出“退出”UI,询问玩家是否退出游戏: 退出按钮 退出UI: publicclass GameQuit : MonoBehaviour { // 取消按钮 public  G ...