Python数据分析之pandas入门

一、pandas库简介

pandas是一个专门用于数据分析的开源Python库,目前很多使用Python分析数据的专业人员都将pandas作为基础工具来使用。pandas是以Numpy作为基础来设计开发的,Numpy是大量Python数据科学计算库的基础,pandas以此为基础,在计算方面具有很高的性能。pandas有两大数据结构,这是pandas的核心,数据分析的所有任务都离开它们,分别是Series和DataFrame。

二、pandas库的安装

paandas安装较为简单,如果使用Anaconda的话,就在终端输入命令 “conda install pandas” 就能安装;如果电脑安装了pip的话,就在终端输入命令 “pip install pandas” 就能安装成功。安装完成后,可以在终端输入 “import pandas as pd” ,测试pandas是否安装成功。

三、Series的使用

Series用来表示一维数据结构,跟数组类似,它由两个相关联的数组组成,其中一个叫index的数组用来存储标签,这些标签与另一个数组中的元素一一对应。如下图所示:

声明Series对象时,需要调用Series()构造函数,并传入一个数组作为Series的主数组,比如:
import pandas as pd
ser=pd.Series([12,33,55,66])
print(ser)'''输出为
0    12
1    33
2    55
3    66
dtype: int64
'''

运行上面的代码,可以知道,如果不指定标签,那么默认标签就是从0开始递增,我们也可以在声明一个Series对象时给它指定标签:

import pandas as pd
ser=pd.Series([12,33,55,66],index=['a','s','d','f'])
print(ser)'''输出为:
a    12
s    33
d    55
f    66
dtype: int64
'''
我们可以通过Series的index很方便得到其内部元素,或者为某元素赋值:

import pandas as pd
ser=pd.Series([12,33,55,66])
print(ser[2])
ser[2]=99
print(ser[2])'''输出为:
55
99
'''
Series对象可以进行运算,比如加减乘除,也可以使用Numpy中的数学函数来对它进行计算:

import pandas as pd
ser=pd.Series([12,33,55,66])
ser2=ser/2
print(ser2)import numpy as np
print(np.log(ser))'''输出为:
0     6.0
1    16.5
2    27.5
3    33.0
dtype: float64
0    2.484907
1    3.496508
2    4.007333
3    4.189655
dtype: float64
'''
从上面可以看出,Series对象似乎跟字典很相似,我们可以把Series对象当作字典来使用,我们在创建Series对象时,将创建好的字典传入Series的构造函数即可,这样字典的键就组成了索引数组,每个索引对应的元素就是字典中对应的值:

import pandas as pd
dic={'wife':'kathy','son':'mary','mother':'lily','father':'tom'}
ser=pd.Series(dic)
print(ser)'''输出为:
wife      kathy
son        mary
mother     lily
father      tom
dtype: object
'''

四、DataFrame的使用

DataFrame这种数据结构针对的是多维数据,由按一定顺序排列的多列数据组成,列之间的数据类型会不同,如下图所示:

从图中可以看出,DataFrame对象有两个索引数组,第一个数组index与行相关,这与Series相似,每个index标签与所在行的所有元素相关联。它的第二个数组包含一系列标签,每个标签下包含一列数据。可以将DataFrame理解为由多个Series对象组成的字典,每一列的名称为字典的键,Series作为字典的值。
创建DataFrame对象的常用方法就是传递一个字典对象给DataFrame()构造函数:

import pandas as pd
dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
frame=pd.DataFrame(dic)
print(frame)'''输出为:name  age sex
0   tom   14   男
1  mary   15   男
2  john   77   女
3  mike   45   男
'''
跟Series对象类似。DataFrame如果没有明确指定标签,那么它的默认标签也是从0开始递增。如果我们想知道DataFrame对象所有列的名称,则调用columns属性就可以了,获取索引列表的话就调用index属性,调用values属性将获取所有的元素。可以给DateFrame对象添加列:

import pandas as pd
dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
frame=pd.DataFrame(dic)
frame['weight']=[89,99,145,123]
print(frame)'''输出为:name  age sex  weight
0   tom   14   男      89
1  mary   15   男      99
2  john   77   女     145
3  mike   45   男     123
'''
在数据处理中,有有时也会用到DataFrame的转置操作,即把行变为列,列变为行,调用DataFrame的T属性即可完成转置:

import pandas as pd
dic={'name':['tom','mary','john','mike'],'age':[14,15,77,45],'sex':['','','','']}
frame=pd.DataFrame(dic)
print(frame.T)'''输出为:0     1     2     3
name  tom  mary  john  mike
age    14    15    77    45
sex     男     男     女     男
'''

五、Series与DataFrame对象之间的运算

pandas允许Series对象与DataFrame对象进行运算,定义Series和DataFrame对象时,把Series对象的索引和DataFrame的列名称保持一致:

import pandas as pd
import numpy as np
frame=pd.DataFrame(np.arange(16).reshape((4,4)),index=['age','name','sex','weight'],columns=['john','tom','mary','cathy'])
print(frame)
ser=pd.Series(np.arange(4),index=['john','tom','mary','cathy'])
print(ser)
res=frame-ser
print(res)'''输出为:john  tom  mary  cathy
age        0    1     2      3
name       4    5     6      7
sex        8    9    10     11
weight    12   13    14     15john     0
tom      1
mary     2
cathy    3
dtype: int32john  tom  mary  cathy
age        0    0     0      0
name       4    4     4      4
sex        8    8     8      8
weight    12   12    12     12
'''
可以看出,DataFrame对象的各元素分别减去了Series对象中索引与之相同的元素,DataFrame对象每一列的所有元素都执行了减法操作。

转载于:https://www.cnblogs.com/IAMTOM/p/10216337.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/252683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

激光雷达和毫米波雷达的区别

什么是激光雷达 激光雷达,是以发射激光束探测目标的位置、速度等特征量的雷达系统。其工作原理是向目标发射探测信号(激光束),然后将接收到的从目标反射回来的信号(目标回波)与发射信号进行比较&#xff0c…

Git—使用方法

1、:插件的安装(eclipse LUNA版本之后已经自动集成,不需要安装插件)、 * 先打开该网页提供了对应版本的EGit,自己选择相应的版本。(http://wiki.eclipse.org/EGit/FAQ#Where_can_I_find_older_releases_of_EGit.3F&…

激光雷达与毫米波雷达对比

激光雷达是一种采用非接触激光测距技术的扫描式传感器,其工作原理与一般的雷达系统类似,通过发射激光光束来探测目标,并通过搜集反射回来的光束来形成点云和获取数据,这些数据经光电处理后可生成为精确的三维立体图像。采用这项技…

安全可靠国产系统下的应用怎么搭建?

据国家信息安全漏洞共享平台(CNVD)统计数据,2016年我国共收录通用软硬件漏洞 10822个,漏洞来源涵盖了众多知名的国外厂商。应用软件的不安全性对我国信息技术发展产生了重大威胁,近年来我国频繁发布信息安全相关政策&a…

Win10 + Python + MXNet + VS2015配置

项目需要使用MTCNN来检测、对齐、剪切出人脸,它是使用MXNet作为框架的,但是我自己的Ubuntu里各种框架乱成一团,不想再添乱就铁了心要在windows里配一个。无奈网上的资料不多,挣扎了几天之后决定留下这么一份文档。 首先我们使用的…

bzoj 3224 Tyvj 1728 普通平衡树

题目大意: 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相同的数&#xff0c…

不懂毫米波雷达?5分钟读懂毫米波雷达的那些事儿

2019年是毫米波风生水起的一年,也是毫米波名声大噪的一年。毫米波应用范围广泛,如毫米波雷达、毫米波天线等。而本文,将向大家介绍毫米波雷达,主要内容包括:毫米波雷达原理、毫米波雷达主要特点、毫米波雷达优势以及毫…

飞鸽传书(IPMSG)协议(翻译稿)

协议声明: 本协议是由日本人Shirouzu Hiroaki (白水 启章)先生编写。 wanpengcoder翻译于Mr.Kanazawa英文文档,转载请注明出处。 http://www.cnblogs.com/wanpeng/ 如有翻译不当之处望提出,以便改进,衷心感…

redis集群的搭建

########环境######### centos 7.2 , gcch 环境ruby 2.0.0 redis 3.2.8 redis-3.3.3gem 公司要求搭建redis集群, 本来觉得挺好搞的,没想到弄到现在.... 1, 环境准备 gcc , ruby 等环境准备 yum -y install gcc ruby ruby-devel rubygems rpm-build zlib redis-ruby接口安装, 我…

2017-2018-1 20155227 《信息安全系统设计基础》第十三周学习总结

2017-2018-1 20155227 《信息安全系统设计基础》第十三周学习总结 找出全书你认为最重要的一章,深入重新学习一下,要求(期末占10分): 完成这一章所有习题详细总结本章要点给你的结对学习搭档讲解你的总结并获取反馈我选…

进程间五种通信方式

进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。 IPC的方式通常有管道(包括无名管道和命名管道)、消息队列、信号量、共享存储、Socket、Streams等。其中 Socket和Streams支持不同主机…

电子书下载:Silverlight 5 in Action

下载:http://www.ctdisk.com/file/8447319

git 的使用方法

git 的使用有3个主要步骤: 1.1 工作区域操作: 在自己的git账号下构建一个工作目录, 并往工作目录里添加文件内容(cp /root/data/VIP_Amount_prediction/* ./)。 cd 当前工作目录, git init, 初始…

Codeforces 898E Squares and not squares

题目大意 给定 $n$($n$ 是偶数,$2\le n\le 2\times 10^{5}$)个非负整数 $a_1,\dots, a_n$($a_i\le 10^9$)。 要求将其中 $n/2$ 个数变成平方数,另外 $n/2$ 个数变成非平方数,变化后的数必须仍是…

UTC时间

每个地区都有自己的本地时间,在网上以及无线电通信中时间转换的问题就显得格外突出。我自己就经常混淆于此,特地研究了一下,记录在此以备忘。 整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合&#xff…

Virtualbox桥接网卡设置

正常情况下,像设置virtualbox虚拟机的桥接网卡非常简单,只需要点配置,然后在配置界面点击网络,然后在右边的网络里选择桥接网络即可。但是如果这么简单就好了,今天要说的就是在不正常的情况下是怎么设置的。 工具/原料…

利用CSS、JavaScript及Ajax实现图片预加载的三大方法

预加载图片是提高用户体验的一个很好方法。图片预先加载到浏览器中,访问者便可顺利地在你的网站上冲浪,并享受到极快的加载速度。这对图片画廊及图片占据很大比例的网站来说十分有利,它保证了图片快速、无缝地发布,也可帮助用户在…

ThinkJS前端搭配vue时的Nginx配置

Thinkjs 作为奇舞团开源的nodejs mvc框架之一,引起了很多NodeJS程序员的亲赖。但是其关于静态文件处理部分支持不够完善,主要是体现在SPA单页应用,之前在ThinkJS 2.*版本时写过一个关于处理单页应用静态资源的middleware think-resource-spa,…

SQL疑难杂症【4 】大量数据查询的时候避免子查询

前几天发现系统变得很慢,在Profiler里面发现有的SQL执行了几十秒才返回结果,当时的SQL如下: 可以看得出来,在652行用了子查询,恰巧目标表(QS_WIP)中的记录数为100000000,通过如下SQL可以得到: S…

2020-11-27

总结各种RGB转YUV的转换公式 如果数据位宽都以8位来说.ITU709:允许 0~255之间所有数据 ITU601:只允许 16~235之间数据, 601是SDTV的数据结构; 656是SDTV的interface 709是HDTV的数据结构 ;1120是HDTV的interface 最近在学习视频的颜色空间转换&#x…