pandas是基于NumPy构建的模块,含有使数据分析更快更简单的操作工具和数据结构,是数据分析必不可少的五个包之一。pandas包含序列Series和数据框DataFrame两种最主要数据结构,索引Index是跟序列和数据框密切相关的数据结构。

通常情况下,引入pandas的约定,只要在代码中看到pd,就要联想到pandas:

import pandas as pd

一,数据结构

序列是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的。序列可以看作是一维数组:

>>> obj=pd.Series([4,5,'a'])
>>> obj
0 4
1 5
2 a
dtype: object

序列的表现形式为:索引在左边,值在右边。由于没有显式为Series指定索引,pandas会自动创建一个从0到N-1的整数型索引。

数据框(DataFrame)是二维的关系表格型数据结构,含有一组有序的列,每列的数据类型是相同的,列与列之间的数据类型可以不同,也可以相同。数据框的逻辑结构是行和列,列有列名(或叫做列索引),行有行索引,还可以为行或列索引设置标签。

序列和数据框之间是密切关联的,可以认为序列(Series)是二维表格中的一列或者一行。实际上,当访问DataFrame的一行时,pandas自动把该行转换为序列;当访问DataFrame的一列时,Pandas也自动把该列转换为序列。

Index对象是序列和数据框必不可少的成分,负责管理轴标签,轴名称等元数据,对于数据框,行有行索引,列有列索引;对于序列,行索引是必备的。索引对象是不可修改的,类似一个固定大小的数组。

二,数据类型

在大多数情况下,pandas使用NumPy的数组和dtypes作为序列和数据框中列的数据类型,NumPy支持的数据类型是float、int、bool、timedelta64[ns]。pandas扩展了NumPy的类型系统,用dtype属性来显示元素的数据类型,pandas主要有以下几种dtype:

  • 字符串类型:object
  • 整数类型:Int64,Int32,Int16, Int8
  • 无符号整数:UInt64,UInt32,UInt16, UInt8
  • 浮点数类型:float64,float32
  • 日期和时间类型:datetime64[ns]、datetime64[ns, tz]、timedelta[ns]
  • 布尔类型:bool

1,查看变量的类型

查看变量的数据类型,使用type(var)函数

type(obj)

2,特殊的objct类型

通常情况下,使用object表示字符类型;

>>> pd.Series(['a', 'b', 'c'], dtype="object")
0 a
1 b
2 c
dtype: object

对于object类型,如果一个pandas对象在单列中包括多个dtype,那么使用object来容纳所有的dtype。

# string data forces an ``object`` dtype
In [333]: pd.Series([1, 2, 3, 6., 'foo'])
Out[333]:
0 1
1 2
2 3
3 6
4 foo
dtype: object

3,数值类型

pandas中的整数类型和浮点数类型可以为空(NULL),在定义数据组或序列时,使用dtype参数来定义整数类型:

arr = pd.array([1, 2, np.nan], dtype=pd.Int64Dtype())
pd.array([1, 2, np.nan], dtype="Int64")
pd.Series([1, 2, np.nan], dtype="Int32")

使用float32、float64定义浮点数类型:

>>> pd.Series([1, 2, np.nan], dtype="float32")
0 1.0
1 2.0
2 NaN
dtype: float32

4,日期和时间类型类型

datetime64[ns] 表示的是日期和时间类型

>>> pd.Series(['2018-07-01', '2019-07-01', '2019-10-01'], dtype="datetime64[ns]")
0 2018-07-01
1 2019-07-01
2 2019-10-01
dtype: datetime64[ns]

三,类型转换

可以使用astype()函数,显式把对象的类型从一个类型强制转换为指定的数据类型:

>>> pd.Series(['2018-07-01', '2019-07-01', '2019-10-01']).astype('datetime64[ns]')
0 2018-07-01
1 2019-07-01
2 2019-10-01
dtype: datetime64[ns]

pandas还有类型转换的特殊函数,用于转换为特定的数据类型:

  • to_numeric()
  • to_datetime()
  • to_timedelta()

比如,把序列转换为日期类型:

>>> pd.to_datetime(pd.Series(['2018-07-01', '2019-07-01', '2019-10-01']))
0 2018-07-01
1 2019-07-01
2 2019-10-01
dtype: datetime64[ns]

 

参考文档:

pandas overview

pandas 学习 第1篇:pandas基础 - 数据结构和数据类型的更多相关文章

  1. pandas 学习 第8篇:Index 对象 - (创建、转换、排序)

    Index对象负责管理轴标签.轴名称等元数据,是一个不可修改的.有序的.可以索引的ndarry对象.在构建Sereis或DataFrame时,所用到的任何数据或者array-like的标签,都会转换为 ...

  2. pandas 学习 第5篇:DataFrame - 访问数据框

    数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...

  3. pandas 学习 第7篇:DataFrame - 数据处理(应用、操作索引、重命名、合并)

    DataFrame的这些操作和Series很相似,这里简单介绍一下. 一,应用和应用映射 apply()函数对每个轴应用一个函数,applymap()函数对每个元素应用一个函数: DataFrame. ...

  4. pandas 学习 第6篇:DataFrame - 数据处理(长宽格式、透视表)

    长宽格式的转换 宽格式是指:一列或多列作为标识变量(id_vars),其他变量作为度量变量(value_vars),直观上看,这种格式的数据比较宽,举个列子,列名是:id1.id2.var1.var2 ...

  5. pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)

    序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...

  6. pandas 学习 第2篇:Series -(创建,属性,转换和索引)

    序列(Series)是由一组数据(各种NumPy数据类型),以及一组与之相关的数据标签(索引)组成,序列不要求数据类型是相同的. 序列是一个一维数组,只有一个维度(或称作轴)是行(row),在访问序列 ...

  7. Pandas 学习 第9篇:DataFrame - 数据的输入输出

    常用的数据存储介质是数据库和csv文件,pandas模块包含了相应的API对数据进行输入和输出: 对于格式化的平面文件:read_table() 对于csv文件:read_csv().to_csv() ...

  8. pandas 学习 第十一篇:处理缺失值

    Pandas中的缺失值是指nan.None和NaT.如果需要把inf 和 -inf视为缺失值,需要设置 pandas的选项: pandas.options.mode.use_inf_as_na = T ...

  9. pandas 学习 第14篇:索引和选择数据

    数据框和序列结构中都有轴标签,轴标签的信息存储在Index对象中,轴标签的最重要的作用是: 唯一标识数据,用于定位数据 用于数据对齐 获取和设置数据集的子集. 本文重点关注如何对序列(Series)和 ...

随机推荐

  1. Python网络爬虫_Scrapy框架_2.logging模块的使用

    logging模块提供日志服务 在scrapy框架中已经对其进行一些操作所以使用更为简单 在Scrapy框架中使用: 1.在setting.py文件中设置LOG_LEVEL(设置日志等级,只有高于等于 ...

  2. 集合系列 Set(七):LinkedHashSet

    LinkedHashSet 继承了 HashSet,在此基础上维护了元素的插入顺序. public class LinkedHashSet<E> extends HashSet<E& ...

  3. Appium+Java 自动化测试系列二:Maven+Testng

    新建Maven项目作为测试项目分为3个步骤: 1.Eclipse安装Testng 插件 2.新建Maven项目 3.引入Testng 一.Eclipse安装Testng插件 TestNG安装可选择在线 ...

  4. 对numpy.meshgrid()理解

    一句话解释numpy.meshgrid()——生成网格点坐标矩阵.关键词:网格点,坐标矩阵 网格点是什么?坐标矩阵又是什么鬼?看个图就明白了: 图中,每个交叉点都是网格点,描述这些网格点的坐标的矩阵, ...

  5. Django多数据库

    每个app使用不同的数据库 1. 配置数据库连接 # settings.py # DATABASES中必须要有default字段 DATABASES = { 'default': { 'ENGINE' ...

  6. java高并发系列 - 第20天:JUC中的Executor框架详解2之ExecutorCompletionService

    这是java高并发系列第20篇文章. 本文内容 ExecutorCompletionService出现的背景 介绍CompletionService接口及常用的方法 介绍ExecutorComplet ...

  7. 在Python中反向遍历序列(列表、字符串、元组等)的五种方式

    1. reversed() a = [1, 2, 3, 4] for i in reversed(a): print(i) 2. range(len(a)-1, -1, -1) a = [1, 2, ...

  8. js|jq获取兄弟节点,父节点,子节点

    08.19自我总结 js|jq获取兄弟节点,父节点,子节点 一.js var parent = test.parentNode; // 父节点 var chils = test.childNodes; ...

  9. Flask 教程 第五章:用户登录

    本文翻译自The Flask Mega-Tutorial Part V: User Logins 这是Flask Mega-Tutorial系列的第五部分,我将告诉你如何创建一个用户登录子系统. 你在 ...

  10. 转载 could not find a getter for ... in class ... 异常的原因解析

    可能原因如下: 1.真的没有写getter方法(发生几率:1%) 2.*.hmb.xml文件中的属性名和pojo不一致(*.hbm.xml和*.java没衔接好,不一致),字段属性没有正确配置,比如, ...