http://pandas.pydata.org/docs/user_guide/10min.html
https://www.runoob.com/pandas/pandas-tutorial.html
https://geek-docs.com/pandas/pandas-tutorials/pandas-tutorial.html
分组Groupby用法详解:https://zhuanlan.zhihu.com/p/101284491
Pandas 一个强大的分析结构化数据的工具集,基础是 Numpy(提供高性能的矩阵运算)。pandas 这个名称来源于panel data(面板数据),从而可见其要处理的数据是多维度的而非单维度。
- pandas 含有使数据清洗和分析工作变得更快更简单的数据结构与操作工具。经常是和其他工具一起使用,如数值计算工具NumPy和SciPy,分析库statsmodels与scikit-learn,以及数据可视化库matplotlib。
- 可以读取较多类型的文件格式,从简单的txt、csv、json到excel,hdf5、pickle再到sas、sql、stata等等文件格式都有得以支持。
- 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征。
Pandas和Numpy的区别:
- Numpy是以矩阵为基础的数学计算模块,是数值计算的扩展包。
- Pandas主要做数据处理,提供了DataFrame的数据结构,契合统计分析的表结构,可用Numpy或其他方式进行计算。
- NumPy是构建pandas的基础,后者大量借鉴了NumPy编码风格。
安装: pip install pandas
一、数据结构组成
Pandas包含以下三个数据结构:系列(Series),数据帧(DataFrame),面板(Panel)。
- Series:一维数组,序列,大小不可变,由同种数据类型元素组成。类似于python中的列表和Numpy中的Ndarray对象。在 Series 中包含的数据类型可以是整数,浮点数,字符串,python对象等。
同种类型数据构成,大小不可变,数据可变。 - DataFrame: 二维数组,大小可变的表格结构,它含有一组有序的列,每列可以是不同的数据类型(整型、字符串、
布尔值等)。使用表格数据(DataFrame),在语义上只需要考虑行和列,而不是轴0和轴1。DataFrame既有行索引,也有列索引,它可以看作是Series组成的字典,不过这些Series共用一个索引。DataFrame是Series的容器。
可以由不同的数据类型构成,大小可变,数据可变。含行索引和列索引,可以对行和列执行算术运算 - Panel:三维数组。Panel是DataFrame的容器。
可以由不同的数据类型构成,大小可变,数据可变。
Panel 相当于一个存储 DataFrame 的字典,3个轴(axis)分别代表意义如下:
axis 0:items item 对应一个内部的数据帧(DataFrame)
axis 1:major_axis 每个数据帧(DataFrame)的索引行
axis 2:minor_axis 每个数据帧(DataFrame)的索引列
二、数据基本操作
1. 创建数据结构
函数 | 说明 |
---|---|
pandas.Series( data, index, dtype, name, copy) | 类似表格中的一个列(column),类似于一维数组,可以保存任何数据类型。Series 由索引(index)和列组成。如果没有指定索引,索引值就从 0 开始,我们可以根据索引值读取数据。【data一组数据(支持多种数据类型,如ndarray,list,constants 类型)。index数据索引标签,索引值必须是唯一的,与data的长度相同,默认为np.arange(n),其中n是数组长度,即[0,1,2,3…. range(len(array))-1] - 1],从 0 开始。dtype数据类型,默认会自己判断。name设置名称。copy拷贝数据,默认为 False。】 |
pandas.DataFrame( data, index, columns, dtype, copy) | 是一个二维的数组结构,类似二维数组。【data一组数据(ndarray、系列series, map, 列表list, 字典dict 等类型)。index索引值,或者可以称为行标签。columns列标签,默认为 RangeIndex (0, 1, 2, …, n) 。dtype数据类型。copy拷贝数据,默认为 False。】 |
pandas.Panel(data, items, major_axis, minor_axis, dtype, copy) | 创建 Panel。【data 支持多种数据类型,如ndarray,series,map,lists,dict,constant和其他数据帧(DataFrame)。items即axis=0。major_axis即axis=1。minor_axis即axis=2。dtype每列的数据类型。copy是否复制数据,默认为false。】 |
pandas.date_range(start=None, end=None, periods=None, freq=‘D’, tz=None, normalize=False, name=None, closed=None, **kwargs) | 生成日期范围。【start开始时间。end结束时间。periods偏移量。freq频率,默认天,pd.date_range()默认频率为日历日,pd.bdate_range()默认频率为工作日。tz时区。name索引对象名称。normalize时间参数值正则化到午夜时间戳(这里最后就直接变成0:00:00,并不是15:30:00)。closed默认为None的情况下,左闭右闭,left则左闭右开,right则左开右闭。】pd.date_range(end=‘1/30/2017 15:00:00’, periods=10) # 增加了时、分、秒 |
2. 数据结构的属性和方法
属性或方法 | 描述 |
---|---|
df.axes | 返回 Series 索引列表。返回DataFrame行轴标签和列轴标签列表。 |
df.dtypes | 返回 Series 数据类型。返回DataFrame每列的数据类型。 |
df.empty | 返回布尔值,表示对象是否为空, 返回True表示对象为空。 |
df.ndim | 返回对象的维数。根据定义,一个Series是一个一维数据结构,DataFrame是一个2D对象。 |
df.size | 返回Series基础数据中的元素个数。返回 DataFrame 中的元素个数。 |
df.values | 以ndarray形式返回 Series 中的实际数据值。将DataFrame中的实际数据作为NDarray返回。 |
df.T | 返回DataFrame的转置,行和列将交换。 |
df.shape | 返回表示DataFrame的维度的元组。 元组(a,b),其中a表示行数,b表示列数。 |
3. 读取/添加/删除
Pandas 索引和选择数据,Python和NumPy索引运算符"[]“和属性运算符”."可以快速轻松地访问Pandas数据结构。由于要访问的数据类型不是预先知道的,直接使用标准运算符具有一些限制。
索引 | 描述 |
---|---|
df.loc[index_name, col_name] | 按标签的行列交叉选取。基于标签(label),包括行标签(index)和列标签(colums),即行名称和列名称,可以使用def.loc[index_name, col_name]选择指定位置的数据。【单个标量标签,df.loc['a'] 选择的是 index 为’a’的一行。标签列表,df.loc[['a', 'b', 'c']] 只选择行。切片对象,在最终选择的数据数据中包含切片的 start 和 stop,df.loc['c' : 'h'] 即包含’c’行,也包含’h’行。布尔数组,用于筛选符合某些条件的行,可以使用 list, array, 也可以使用Series(使用Series时 index需要一致,否则会报 IndexError),df.loc[df.A>0.5] 筛选出所有’A’列大于0.5的行。】# df.loc[lambda df:[0,1]] 选择前两行 |
df.iloc() | 按位置序号的行列交叉选取。基于整数的索引,利用元素在各个轴上的索引序号进行选择,序号超过范围产生IndexError,切片时允许序号超过范围。【整数,与.loc相同,如果只使用一个维度则对行选择,小标从 0 开始,df.iloc[5] 选择第 6 行。整数列表或者数组,df.iloc[[5, 1, 7]] 选择第 6 行, 第 2 行, 第 8 行。元素为整数的切片操作,与.loc不同,这里下标为 stop 的数据不被选择,df.iloc[0:3] 只包含 0,1,2行,不包含第 3 行。布尔数组进行筛选, 可以使用 list 或者 array,使用 Series会出错(NotImplementedError 和 ValueError,前者是 Series 的 index 与待切片 DataFrame的index 不同时报错,后置 index 相同时报错),df.iloc[np.array(df.A>0.5)] ,df.iloc[list(df.A>0.5)]。】# df.iloc[lambda df:[0,1]] 选择前两行 |
df.ix() | 基于标签和整数,进行选择和子集化对象的混合方法。在0.20.0中已经不建议使用了。 |
df[] | 快捷的整行整列选取。【df[标签列表],选取多个整列。df[切片],选取整行(切片操作,选择的是列,并且必须使用列名。只能输入一个维度,不能用逗号隔开输入两个维度。)】# df[‘A’] |
运算符. | 属性访问,可以使用属性运算符.来选择列。# df.A |
import pandas as pd
d = {
'one' : pd.Series([1, 2, 3]