-
Notifications
You must be signed in to change notification settings - Fork 0
Pandas
Pandas(panel data)基于Numpy,其主要数据类型为Series和DataFrame,分别为一维和二维数据表,还有Panel类型,用于三维甚至更高维的数据,但很少使用。

import pandas as pd-
Series
Series是一维的数组型对象,内部嵌套了一个一维的ndarry类型,并含有数据标签index。 分别可以通过values和index属性来获取数据值和标签.
此外还有deype属性表示数据类型,Series.index和Series本身都有有name属性表示其名称
(交互式环境下索引在左,值在右) $ \ $
Series可以执行numpy中的数组运算,运算会作用在values即其内嵌的ndarray上。 生存Series序列主要有以下几种方法:
- 使用一维ndarray生成Series
# index默认从0开始,也可以自行指定 pd.Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'])
- 使用列表或元组构建
pd.Series([1,2,3,...]) pd.Series((4,5,6,...))
- 使用字典构建
$$ 键 \rightarrow index \ 值 \rightarrow values $$pd.Series({},index=...)
若修改index后,多出的index对应的值为NaN,缺少的index及其对应的值会消失
- 使用DataFrame类型中的某一列构建
将DataFrame中的一列提取出来就是一个Series类型。frame[column]这样取后原来的column列索引就是获得的Series的name,原来的index也就是之后Series的index。
若要检查Series的缺失值,可以使用isnull()和notnull()函数,返回一个对应的布尔数组型的Series
-
DataFrame
DataFrame为二维数据,行和列分别有索引'index'和'columns',他们都有name属性,但不同于Series其本身并没有name属性。DataFrame也有dtype属性,values为一个二维的ndarray类型。pd.DataFrame(data=2d_array, index=[行索引], columns=[列索引], dtype='...')
- 列: 通过
frame[column]或frame.column都可以获取列,但后则只有在列名为python变量名时才有效,前者还可以用来添加一列。 若要删除列,可以使用del语句del frame[column] - 行: 行可以通过位置特殊属性
loc进行选取 此外,还可以对行列进行转置frame.T,index将会和column交换
- 列: 通过
-
Index
Index为索引对象,Series和DataFrame都有索引对象,但不一定就是Index,还可能为RangeIndex Int64Index等多种形式,但他们都是索引类型。一些索引对象的方法 描述 append 将额外索引粘贴到原索引,产生一个新索引 difference 两个索引的差集 intersection 交集 union 并集 isin 每个值是否在传入容器中 delete 将i位置元素删除,产生新索引 drop 删除指定的元素,产生新索引 insert 在i位置插入元素,产生新索引 is_monotonic 是否递增 is_unique 索引是否唯一 unique 去除重复索引
-
重建索引
DataFrame.reindex()函数可以重建索引DataFrame.reindex(labels=None, index=None, columns=None, axis=None, method=None, copy=True, level=None, fill_value=nan, limit=None, tolerance=None)
reindex方法的参数
参数 描述 index 可以为索引类型或者py其他数据结构,替换index(新的index的值不会继承原来位置的值,默认为Nan) columns 替换columns索引 method 'fill'向前填充, 'bfill'向后填充(对str类型没有用,str类型无法比大小) fill_value 用于填充Nan limit 向前后填充时填充的最大行数 copy True总是复制底层数据 -
删除行列
pd.drop([], axis=0/1, inplace=True)
axis: 删除指定的index行或columns列
inplace: 表示是否改变原对象 -
选择数据
使用loc和iloc选择数据# 使用索引名选取数据 DataFrame.loc[[index], [columns]] # 按索引顺序选取数据 DataFrame.iloc[[index_number], [columns_number]]
下面是DataFrame索引选项表
类型 描述 df[val] 访问列 df.loc[] 访问单或多行 df.iloc[] $\uparrow$ df.loc[:, n] 访问单或多列 df.iloc[:, n] $\uparrow$ df.at[label_i, label_j ] 根据行列访问单个元素 df.iat[label_i, label_j ] $\uparrow$ get_value set_value 根据行和列设置单个值
Series或DataFrame相加时会对索引做并集,唯一的索引值变成NaN。只有索引相同的元素才会进行运算
| 算术方法 | 描述 |
|---|---|
| add, radd | + |
| sub, rsub | - |
| div, rdiv | / |
| floordiv, rfoordiv | // |
| mul, rmul | * |
| pow, rpow | ** |
可选参数: fill_value,用于填充NaN值
-
广播
- DataFrame减去或加上一个同列数的Sereis是,会将操作广播到每一行,即对每一行加减Series。
- Series中的索引会与列索引进行匹配,若有多的索引运算后的值为NaN。
- 若要对行进行批评,广播到列,可修改参数
axis=1
-
重复索引 索引可以有重复的值,使用这种索引时会返回所有该索引对应的值,可以使用
is_unique属性判断索引是否唯一Index.is_unique
使用函数映射时Numpy中的通用函数对Pandas对象同样有效
-
apply函数
DataFrame.apply(function)
可选参数: axis = 0/1
函数也可以自定义
function = lambda x: x.min() - x.max() # 默认对每一列进行操作 df.apply(function)
-
applymap和map
也可以applymap函数进行逐元素操作format = lambda x: '%2f" % x # 转换每个元素的格式 df.applymap(format)
applymap是对DataFrame进行操作,若要对Series的每个元素进行操作,可以使用map方法
df.iloc[0].map(format)
-
sort_index 对索引排序
sort_index可以对单个字母或数值类型索引进行排序DataFrame.sort_index(axis = 0/1, ascending=True/False)
axis: 指定索引轴
ascending: 是否升序 -
sort_values 对值排序
默认情况下缺失值会被排序在Series的尾部Series.sort_values() DataFrame.sort_values(by = [columns])
by: 参数用于指定列
-
rank 排名
排名是将数据排序后,给数据分配一个名次,就像班级成绩的第几名一样Series.rank(method = ..., ascending = False/True) DataFrame.rank(axis = 0/1)
axis=0是匹配行,对列进行排名;下面method参数的选项
平级关系的方法 描述 'average' 进行平均排名,相同数据会用平均数(默认) 'min' 最小排名,相同数据用小的那个(例如两个第二名,没有第三名,直接到第四名) 'max' 最大排名,相同数据用大的那个 'first' 相同按数据出现次序排名 'dense' 类似min,但名次不会间断(例如两个第二名,下一个是第三名)
-
规约方法
sum()和mean()这类方法属于规约型方法,规约方法的可选参数如下方法 描述 axis 0行向 1列向 skipna 排除缺失值 level 用于多层索引 除了归约型还有累计型的方法,例如
cumsum(),下面是一些常用的统计性方法的汇总方法 描述 count 非NA的个数 describe 计算各种信息的汇总集合 min max 计算最值 argmin argmax 计算最值索引位置 idxmin idxmax 最值下表 quantile 计算样本0~1之间的分位数 sum 加和 mean 均值 median 中位数 mad 平均值的平均绝对方差 prod 所有值的积 var 方差 std 标准差 skew 样本偏度(第三时刻) kurt 样本峰度(第四时刻) cumsum 累计值 cummin cummax 累积值的最大、最小值 cumpord 累计积 diff 第一个算术差值(时间序列) pct_change 计算百分比 corr 返回相关性矩阵 cov 返回协方差矩阵 corriwth DataFrame中的行或列对Series的相关性 前面给出了获得index唯一值的方法,要获得Series的唯一值可以使用
unique方法,唯一值不会被排序,可以使用uniques.sort(),相应的,value_counts计算Series每个值的数量。isin对Series或DataFrame一列的数据进行检查,判断是否包含在参数中。相关的有Index.get_indexer方法,即对索引进行value_counts操作。Series.isin(['b', 'c']) # 返回bool值列表 Index.get_indexer(['a', 'b'])
-
文本数据的读写
pandas最常用的就是
read_csv和read_table函数,下面是常用函数表函数 描述 read_csv 从文件 URL或文件类型对象读取有分隔的数据(默认,) read_table 从文件 URL或文件类型对象读取有分隔的数据(默认\t) read_fwf 从特定宽度格式文件读取数据(无分隔符) read_clipboard 同read_table,但是从剪贴板读取 read_excel 从Excel的xls或xlsx文件读取表格数据 read_hdf 读取pandas存储的HDF5文件 read_html 从HTML文件读取表格数据 read_json 从JSON字符串读取数据 read_msgpack 读取MessagePack二进制格式的pandas数据 read_pickle 读取python pickle格式存储的对象 read_asa 读取SAS系统中定制存储格式的SAS数据集 read_sql 将SQL查询结果读取为pandas的DataFrame read_stata 读取Stata格式数据集 read_feather 读取Feather二进制格式