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]
参考文档: