01Pandas_数据结构

Pandas数据结构

做python数据分析,数据挖掘,机器学习的童鞋应该都离不开pandas。在做数据的预处理的时候pandas尤为给力。

本文主要介绍pandas中的两种数据结构:series,dataframe。

import pandas as pd

1.Series

首先来介绍series数据结构。

series 类似于一维数组的对象。对于series基本要掌握的是:

  1. 构建series
  2. 获取series中的数据与索引
  3. 预览数据
  4. 通过索引获取数据
  5. Series的运算
  6. name属性

1.1 构建Series

  • 通过list构建Series

向pd.Series()中传入一个list。就等于将这个list转换成了Series数据格式了。

可以通过打印数据类型来检查,显示的是Series

ser_obj = pd.Series(range(10, 20))print type(ser_obj)
<class 'pandas.core.series.Series'>
  • 通过字典dict构建Series

dict中每个key其实是索引,对应的value是值。所有的值的数据类型需一致。

year_data = {2001: 17.8, 2002: 20.1, 2003: 16.5}
ser_obj2 = pd.Series(year_data)
print ser_obj2.head()
2001    17.8
2002    20.1
2003    16.5
dtype: float64

1.2 获取数据与索引

对于Series, 使用.values方法就能获取它的值;使用.index方法就能获取它的索引。

下面这个例子获取的索引并没有直接逐个打印出来,而是打印了一个RangeIndex,里面的参数表示起始数(包括),结尾数(不包括),步长为1。

# 获取数据
print ser_obj.values# 获取索引
print ser_obj.index
[10 11 12 13 14 15 16 17 18 19]
RangeIndex(start=0, stop=10, step=1)

1.3 预览数据

如果数据量太大,但又想看看数据的格式,那么可以提取前几条数据来瞧一瞧。

直接使用.head(),如果里面不传入参数,那么默认提取前5条数据;括号里也可以出传入参数来指定提取前面n条。

# 预览数据
print ser_obj.head(3)
0    10
1    11
2    12
dtype: int64

1.4 获取数据

可以通过索引获取Series中对应位置的value。索引放在中括号[]中。

#通过索引获取数据
print ser_obj[0]
print ser_obj[8]
10
18

1.5 运算

对1个Series 进行加减乘数的运算时,表示对Series中的每个元素都做一次运算,然后输出相同长度的Series。

# 索引与数据的对应关系仍保持在数组运算的结果中
print ser_obj * 3
0    30
1    33
2    36
3    39
4    42
5    45
6    48
7    51
8    54
9    57
dtype: int64

除了普通的加减乘除等运算,还可以进行布尔运算,如下,会将所有大于15的值输出成True, 小于15的值输出成False。

print ser_obj > 15
0    False
1    False
2    False
3    False
4    False
5    False
6     True
7     True
8     True
9     True
dtype: bool

1.6 name属性

可以对Series中的Index和Values添加自定义的名字。

# name属性
ser_obj2.name = 'score'
ser_obj2.index.name = 'year'
print ser_obj2.head()
year
2001    17.8
2002    20.1
2003    16.5
Name: score, dtype: float64

2.DataFrame

DataFrame类似于多维数组或表格数据,与excel类似。

每列数据可以是不同的类型,但是同一列的数据需保持一致数据类型。

DataFrame的索引包括行索引与列索引。

掌握DataFrame的基本使用,需要熟悉以下几个要点。

  1. 构建DataFrame的两种方法:ndarray构建,dict构建
  2. 通过索引获取数据
  3. 增加与删除数据
import numpy as np
  •  

2.1 构建DataFrame

  • 通过ndarray构建DataFram
# 首先创建一个ndarray (大小是5*4)
array = np.random.randn(5,4)
print array# 将ndarray传入pd.DataFrame()中,即得到了一个DataFrame
df_obj = pd.DataFrame(array)
print df_obj.head()
[[-1.15943918  0.41562598  0.24219151 -0.54127251][-0.72949761  0.7299977  -0.35770911 -1.55597979][-0.26508669  0.73079105  0.019037   -0.28775191][ 2.35757276  0.54826604 -1.10932131  0.36925581][ 0.60940029  0.11843865 -0.30061918  0.44980428]]0         1         2         3
0 -1.159439  0.415626  0.242192 -0.541273
1 -0.729498  0.729998 -0.357709 -1.555980
2 -0.265087  0.730791  0.019037 -0.287752
3  2.357573  0.548266 -1.109321  0.369256
4  0.609400  0.118439 -0.300619  0.449804

上面构建好的DataFrame可见左边有一列是行索引,上面有一行是列索引。如果没有特殊指定,系统会默认生成行索引与列索引的。

  • 通过dict构建DataFrame

还记得通过字典构建series时,Key是作为索引的;在DataFrame中,Key是作为列索引(列名)。

讲dict传给pd.DataFrame()中即构成了一个DataFrame

dict_data = {'A': 1., 'B': pd.Timestamp('20161223'),'C': pd.Series(1, index=list(range(4)),dtype='float32'),'D': np.array([3] * 4,dtype='int32'),'E' : pd.Categorical(["Python","Java","C++","C#"]),'F' : 'wangxiaocao' }
#print dict_data
df_obj2 = pd.DataFrame(dict_data)
print df_obj2.head()
     A          B    C  D       E            F
0  1.0 2016-12-23  1.0  3  Python  wangxiaocao
1  1.0 2016-12-23  1.0  3    Java  wangxiaocao
2  1.0 2016-12-23  1.0  3     C++  wangxiaocao
3  1.0 2016-12-23  1.0  3      C#  wangxiaocao

2.2 通过索引获取数据

这里先简单介绍一下通过列索引来获取数据。

通过列索引获取的数据顾名思义就是获取处该索引的一整列。着一整列的数据其实就是Series的数据格式。

所以DataFrame可以看成是由一列一列的series组成的。

有两种方式:
1. df_obj2[‘F’]
2. df_obj2.F

# 方式1
print df_obj2['F']
print type(df_obj2['F'])# 方式2
print df_obj2.F
0    wangxiaocao
1    wangxiaocao
2    wangxiaocao
3    wangxiaocao
Name: F, dtype: object
<class 'pandas.core.series.Series'>
0    wangxiaocao
1    wangxiaocao
2    wangxiaocao
3    wangxiaocao
Name: F, dtype: object

2.3 增加与删除列

# 增加列
df_obj2['G'] = df_obj2['D'] + 4
print df_obj2.head()
     A          B    C  D       E            F  G
0  1.0 2016-12-23  1.0  3  Python  wangxiaocao  7
1  1.0 2016-12-23  1.0  3    Java  wangxiaocao  7
2  1.0 2016-12-23  1.0  3     C++  wangxiaocao  7
3  1.0 2016-12-23  1.0  3      C#  wangxiaocao  7
# 删除列
del df_obj2['G'] 
print df_obj2.head()
     A          B    C  D       E            F
0  1.0 2016-12-23  1.0  3  Python  wangxiaocao
1  1.0 2016-12-23  1.0  3    Java  wangxiaocao
2  1.0 2016-12-23  1.0  3     C++  wangxiaocao
3  1.0 2016-12-23  1.0  3      C#  wangxiaocao

3.索引对象 Index

pandas的两种数据格式都与索引息息相关,这里罗列一下索引的相关知识。

首先要明确索引的特性:不可变!索引

# 索引对象不可变
df_obj2.index[0] = 2
---------------------------------------------------------------------------TypeError                                 Traceback (most recent call last)<ipython-input-17-7f40a356d7d1> in <module>()1 # 索引对象不可变
----> 2 df_obj2.index[0] = 2/home/cc/anaconda2/lib/python2.7/site-packages/pandas/indexes/base.pyc in __setitem__(self, key, value)1243 1244     def __setitem__(self, key, value):
-> 1245         raise TypeError("Index does not support mutable operations")1246 1247     def __getitem__(self, key):TypeError: Index does not support mutable operations

常见的Index种类有:

  1. Index
  2. Int64Index
  3. MultiIndex:层级索引
  4. DatetimeINdex:时间戳类型的索引
print type(ser_obj.index)
print type(df_obj2.index)print df_obj2.index
<class 'pandas.indexes.range.RangeIndex'>
<class 'pandas.indexes.numeric.Int64Index'>
Int64Index([0, 1, 2, 3], dtype='int64')

注:部分例子来自于小象学院Robin课程

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

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

相关文章

加密函数

MD5&#xff1a;密码为web页面做准备&#xff0c;建议使用MD5 PASSWORD() :修改当前用户或其他用户密码 mysql> SELECT MD5(admin); #对admin进行MD5的加密&#xff08;32位&#xff09;----------------------------------| MD5(admin) |--------------------------------…

如何使用notepad运行python程序

关于使用notepad运行python程序 首先要确保python解释器已经安装成功,查看方法,windows可以在命令提示符中查看,通过按下winR键,调出运行窗口,在输入框中输入cmd回车,然后在命令行中输入python,若出现版本信息,例如Python 3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC…

H.264学习历程(天之骄子)

半年前&#xff0c;我知道了H.264这个名词。那个时候决定学习H.264&#xff0c;可是我连资料都不知道如何收集。而且整个学校就只有我一个人在学习H.264&#xff0c;找不到人交流&#xff0c;所以那个时候学得真的是举步维艰&#xff0c;很痛苦&#xff0c;而能在网上认识一个学…

插入排序:表折半插入

在前一篇插入排序&#xff1a;表插入中。我们用静态链表的存储方式。直接插入的策略&#xff0c;构建了一种新的插入排序算法&#xff1a;表插入。有人可能会想到&#xff1a;相同是静态链表的形式&#xff0c;为什么不使用更高效的折半插入策略呢&#xff1f;这样的想法真的非…

C++编译报错:重复定义

http://note.youdao.com/noteshare?idcb2bed862a2daae89775603168f297af转载于:https://www.cnblogs.com/taiyang-li/p/6637093.html

【机器学习】sklearn实现---归类为5大类

sklearn实现---归类为5大类 sklearn.preprocessing.scale()&#xff08;最常用&#xff0c;易受异常值影响&#xff09;sklearn.preprocessing.StandardScaler()sklearn.preprocessing.minmax_scale()&#xff08;一般缩放到[0,1]之间&#xff0c;若新数据集最大最小值范围有变…

关于安装deepin+window10双系统有时没有声音的问题

关于安装deepinwindow10双系统有时没有声音的问题 这个问题小编目前还没有解决,求大神帮忙! deepin社区官网:深度科技社区 还可以参考一下其他的教程 深粉交流:新手刚刚安装好DEEPIN&#xff0c;但没有声音&#xff0c;怎而解决&#xff1f; 冰封飞飞(云网牛站):在Deepin系统中…

如何读H.264的标准和代码

首先&#xff0c;还是要弄清楚编解码的流程和 H.264 的关键技术&#xff0c;看白皮书就知道了&#xff0c;另外 H.264 综述类的文章和别人的学位论文一般也会讲到&#xff1b; 其次&#xff0c;弄清楚代码的各个函数实现的功能&#xff0c;这个可以看看 JM 代码里各个函数前面的…

Kafka官方文档翻译——实现

IMPLEMENTATION 1. API Design Producer APIs Producer API封装了底层两个Producer&#xff1a; kafka.producer.SyncProducerkafka.producer.async.AsyncProducerclass Producer {/* Sends the data, partitioned by key to the topic using either the *//* synchronous or t…

【机器学习】熵、决策树、随机森林 总结

一、熵 公式&#xff1a; −∑i1np(xi)∗log2p(xi)-\sum_{i 1}^{n}{p(xi)*log_2p(xi)}−i1∑n​p(xi)∗log2​p(xi) ∑i1np(xi)∗log21p(xi)\sum_{i1}^{n}p(xi)*log_2\frac{1}{p(xi)}i1∑n​p(xi)∗log2​p(xi)1​ import numpy as np# 账号是否真实&#xff1a;3no&#xff…

HDU 4857 逃生(拓扑排序)

拓扑排序 一.定义 对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序&#xff0c;是将G中所有顶点排成一个线性序列&#xff0c;使得图中任意一对顶点u和v&#xff0c;若<u&#xff0c;v> ∈E(G)&#xff0c;则u在线性序列中出现在v之前。 通常&#xff0c;…

关于deepin系统安装design compiler的问题解答

关于deepin系统安装design compiler的问题解答 Design Compiler是Synopsys综合软件的核心产品。它提供约束驱动时序最优化&#xff0c;并支持众多的设计类型&#xff0c;把设计者的HDL描述综合成与工艺相关的门级设计&#xff1b;它能够从速度、面积和功耗等方面来优化组合电…

iOS 数据持久化-- FMDB

一、简介 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象&#xff0c;省去了很多麻烦、冗余的C语言代码 对比苹果自带的Core Data框架&#xff0c;更加轻量级和灵活 提供了多线程安全的数据库操作方法…

【机器学习】交叉验证筛选参数K值和weight

交叉验证 导包 import numpy as npfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn import datasets#model_selection &#xff1a;模型选择 # cross_val_score: 交叉 &#xff0c;validation&#xff1a;验证&#xff08;测试&#xff09; #交叉验证 from s…

jqGrid列的统计

$("#List").jqGrid({ url: "${pageContext.request.contextPath}/cbfx/getCbhzList.do", datatype: "json", mtype: GET, colNames:["成本类别","费用","去年同期费用","备注"], colMod…

手机只能签荣耀!最忠诚代言人胡歌喊你去天猫超品日

在你心中&#xff0c;男神胡歌是什么样子&#xff1f;“御剑乘风来&#xff0c;除魔天地间。”也许是《仙剑奇侠传》里飞扬跋扈、青春不羁的侠客李逍遥。“遍识天下英雄路&#xff0c;俯首江左有梅郎。”也许是《琅铘榜》中才智冠天下&#xff0c;远在江湖却名动帝辇的麒麟才子…

欧式距离与曼哈顿距离

欧式距离&#xff0c;其实就是应用勾股定理计算两个点的直线距离 二维空间的公式 其中&#xff0c; 为点与点之间的欧氏距离&#xff1b;为点到原点的欧氏距离。 三维空间的公式 n维空间的公式 曼哈顿距离&#xff0c;就是表示两个点在标准坐标系上的绝对轴距之和&#xff1a…

在maven pom.xml中加载不同的properties ,如localhost 和 dev master等jdbc.properties 中的链接不一样...

【参考】&#xff1a;maven pom.xml加载不同properties配置[转] 首先 看看效果&#xff1a; 点开我们项目中的Maven projects 后&#xff0c;会发现右侧 我们profile有个可勾选选项。默认勾选localhost。localhost对应项目启动后&#xff0c;会加载配置左侧localhost文件夹下面…

4.8-全栈Java笔记:包机制

包机制是java中管理类的重要手段。 开发中&#xff0c;我们会遇到大量同名的类&#xff0c;通过包我们很容易对解决类重名的问题&#xff0c;也可以实现对类的有效管理。 包对于类&#xff0c;相当于&#xff0c;文件夹对于文件的作用。package我们通过package实现对类的管理&a…

python安装以及版本检测

Windows 安装 Python 3 目前Python有两个大版本&#xff0c;分别是 2.X 和 3.X &#xff0c;我们的教程基于最新版本 3.6.1 首先我们需要获取Python的安装包&#xff0c;可以从官网获取&#xff0c;如果你因为没有VPN工具而无法访问官网的话&#xff0c;我已经将它放在网盘了&…