在pandas模块教程讲解中,默认执行的代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
1. Series
pandas.Series对象用于保存带有索引的多种数据类型(str,int,float等)的一维数组,由index,values构成:
- index可重复,可为数值或字符串
- values :可以为多种数据类型,但是一个Series对象中类型必须统一
1.1 Series对象基本操作
1.1.1 Series初始化
- pd.Series(data=None, index=None, dtype: 'Dtype | None' = None, name=None,) -> 'None’
- data:可以是标量、列表、字典、NumPy数组等。
- index:数据索引标签,如果不指定,默认从 0 开始(不具有唯一性,可重复)。
- dtype:数据类型,默认会自己判断。
- name:设置列名称(DataFrame中对应column参数)
代码演示
快速常见索引技巧:index = list(”abcdef”)
等价于index = [’a’,’b’,’c’,’d’,’e’,’f’]
1.1.2 索引操作
- 标签索引:s.loc[] 包含终点
- 位置索引:s.iloc[] 不包含终点
下面为通过索引操作访问数据:
代码案例:
2、查看特定量数据
- Series.head([n]) 访问前n行数据,,缺省为5行
- Series.tail([n]) 访问后n行数据,缺省为5行
1.1.4 Series对象运算
Series对象和Numpy数组一样,无须对每一个元素进行迭代处理,只需使用算数运算符即可自动实现对Series对象的各个元素进处理。
1.1.5 Series对象的增删改操作
注:
- 给Series对象添加/删除元素时只能通过位置索引,不能用位置索引。故在上例中用
s1[5] =6
或s1.iloc[5] =6
添加元素都是不允许的。
- 拼接两Series对象时,存在两个相同标签并不会产生冲突。此时print(s3.loc[1])看看
1.1.6、获取非重复数据
series.drop_duplicates()方法获取非重复数据,对原series对象不做更改
1.1.7 对缺失数据处理
在pandas中,处理确实数据有两种方法:Series.isna()和Series.isnull(),且在使用上等同,同理notna()和notnull()也等同。
注:缺失值的表示方法:np.nan
1.1.8 常用属性
示例及返回所用数据:
名称 | 属性 | 示例 | 返回 |
axes | 以列表的形式返回所有行索引标签。 | s.axes | [Int64Index([1, 2, 3, 4, 5], dtype='int64')] |
dtype | 返回对象的数据类型。 | s.dtype | object(另还有int64,float64,bool类型) |
empty | 返回True/False,判定是否为空对象 | s.empty | False |
is_unique | 返回True/False,判定元素是否有重复 | s.is_unique | True(如果s中有多个”a”返回False) |
size | 返回对象的长度。 | s.size | 5 |
values | 返回 Series 对象对象的对应numpy.ndarray对象. | s.values | ['a' 'b' 'c' 'd' 'e'] |
index | 返回一个RangeIndex对象,用来描述索引的取值范围。 | s.index | Int64Index([1, 2, 3, 4, 5], dtype='int64') |
注意: 对于value参数, 大样多提一嘴. 在使用机器学习的框架建模时, 有时需要将pandas中Series对象的元素转换为Numpy数组处理.value属性是将Series对象作为NumPy数组进行返回的属性.但是, 如果Series对象中包含的数据类型是pandas中特有的category类型,是无法将其作为NumPy数组处理的.
1.2 DataFrame
DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)。
1.2.1 创建DataFrame长度
- pd.DataFrame( data, index=None, columns=None, dtype=None)
- data:输入的数据,可以是 ndarray,series,list,dict,标量以及一个 DataFrame。
- index:行标签,如果没有传递 index 值,则默认行标签是 np.arange(n),n 代表 data 的元素个数。
- columns:列标签,如果没有传递 columns 值,则默认列标签是 np.arange(n)。
- dtype:dtype默认为None,指明df对象中每一列的数据类型(参数值:str,”float64”,”int64”)。
参数讲解
注:index和columns里面标签值均不具有唯一性,可重复
1.2.2 访问DateFrame数据
对于FataFrame对象来说,行和列的位置索引和标签索引是其固有属性。位置索引固定为从0开始的连续整数。如果行标签索引和列标签索引未被给出,那么标签索引和位置索引相同,如果标签索引有被定义,则被重写。
下面讲解中用index_n和loc_n表示指定为字符串类型的标签索引,i_n和c_n表示系统默认的位置索引,int类型。
按行索引读取
- df.loc[] 标签索引
- df.loc[index_1] 访问单行
- df.loc[index_1:index_2] 访问指定连续多行;包左包右
- df.loc[[index_1, index_2, …, index_n]] 访问指定任意多行
- df.iloc[] 位置索引
- 略(和标签索引用法一致)
df.iloc[i_1:i_n:step]
,可以使用简写为df[i_1:i_n:step]
形式- 但是
df[i_1]
的语法是错误的
按列索引读取
- df.col_1 访问单列,需要指定字符串类型的列标签,且不能加引号
- df[col_1] 访问单列, col_1如果是字符串必须加双引号, 返回的是Series对象
- df[[col_1, col_2, …]] 访问多列,需要用中括号将多列标签索引包裹
- df[[col_1]] 访问单列, 返回的是DataFrame对象
- df[col_1:col_n:step] 用法给到
df[i_1:i_n:step]
故,对列无效
读取行列
- df.loc[index_1:index_2:step_i, col_1:col_2:step_c] 访问指定连续多行多列数据
- df.iloc[i_1:i_n:step_i, c_1:c_n:step_c] 访问指定连续多行多列数据
1.2.3 对DataFrame增删改
1.2.4 常用方法和属性
名称 | 属性&方法描述 | 示例 | 返回 |
T(Transpose) | 行和列转置。 | df.T | 1 2 3 4
one 1 2 3 4
two 1 2 3 4
three 1 2 3 4 |
axes | 返回一个仅以行轴标签和列轴标签为成员的列表。 | df.axes | [Int64Index([1, 2, 3, 4], dtype='int64'), Index(['one', 'two', 'three'], dtype='object')] |
dtypes | 返回每列数据的数据类型。 | df.dtypes | one int64
two int64
three int64
dtype: object |
empty | 返回bool值,DataFrame中没有数据或者任意坐标轴的长度为0,返回True,否则返回False | df.empty | False |
ndim | 轴的数量,也指数组的维数。 | df.ndim | 2 |
shape | 返回一个元组,表示了 DataFrame 维度。 | df.shape | (4, 3) |
size | 返回元素数量,int型 | df.size | 12 |
values | 返回numpy.ndarray数组对象,保存DataFrame 中的元素值。 | df.values | array[[1 1 1]
[2 2 2]
[3 3 3]
[4 4 4]] |
head() | 返回前 n 行数据。 | ㅤ | ㅤ |
tail() | 返回后 n 行数据。 | ㅤ | ㅤ |
shift() | 将行或列移动指定的步幅长度 | ㅤ | ㅤ |
ㅤ | ㅤ | ㅤ | ㅤ |
ㅤ | ㅤ | ㅤ | ㅤ |
数据类型
在大多数情况下,pandas使用NumPy的数组和dtypes作为序列和数据框中列的数据类型,NumPy支持的数据类型是float、int、bool、timedelta64[ns]。pandas扩展了NumPy的类型系统,用dtype属性来显示元素的数据类型,pandas主要有以下几种dtype:
Pandas dtype | Python type | NumPy type | Usage |
object | str or mixed | string_, unicode_, mixed types | Text or mixed numeric and non-numeric values |
int 64 | int | int_,int8, int16, int32, int64,
uint 8, uint 16,uint 32,uint 64 | Integer numbers |
float 64 | float | float_,float16, float32, float64 | Floating point numbers |
bool | bool | bool_ | True/False values |
datetime64 | NA | datetime 64[ns] | Date and time values |
timedelta[ns] | NA | NA | Differences between two date times |
category | NA | NA | Finite list of text values |
- Series:一维数组,与NumPy中的一维数组相似,和Python自身的list也相似。区别自语Series中的数据只能是一种数据,而list中的数据可以不一样
- Time-Series:以时间为索引的Series
- DataFrame:二维的表格型数据结构,经常用于处理Excel表格数据等。
- Panel:三维数组(0.25版本后,统一使用xarray,不再支持Panel)