数据科学包——pandas
-
ipython
- 查看相关函数和补全
- 输入库中的部分函数名,按tab
- 如np.r ,按tab
- 输入库中的部分函数名,按tab
- 查看文档
- 函数名?
- 直接执行shell命令
- 特殊命令
- %run
- %timeit
- 更多ipython命令:%quickref
- 魔术命令:%magic
- 特殊命令
- notebook
- 查看相关函数和补全
-
pandas
- Series (一行或一列)
- pd.Series(list)
- 运算标签自动对齐
- 二维数组
- pd.DataFrame()
- 由数组创建(行)
- data = pd.DataFrame(np.random.randn(6,4), index=索引列表, columns = 列标签列表)
- 由字典创建(列)
- d=pd.DataFrame({‘A’,1,‘B’=a,‘C’, 545}) # ABC为列标签
- 字典值对应列表长度要一致
- 字典值可都为Series
- 由数组创建(行)
- 实质:np.ndarray
- pd.DataFrame()
- 三维数据
- Panel
- items:对应第几个DataFrame
- major_axis:行标签
- minor_axis:列标签
- 最新版本已移除
- Panel
- 操作
- 查看
- 查看形状
- data.shape
- 查看值
- data.values
- 查看所有列的属性类型
- df.dtypes
- 查看某一列
- df.列名
- 查看前几行数据
- data.head() # 默认5行
- 查看最后几行数据
- data.tail() # 默认5行
- 查看行标签
- data.index
- 查看列标签
- data.columns
- 数据透视表
- df.pivot_table(values=要查看的值对应的索引列表,index=作为行标签的索引列表,columns=作为列标签的索引列表)
- 统计每个值有多少个
- df.value_counts()
- 找出值最多的数
- df.mode()
- 查看数据的统计值(平均数、中位数等)
- data.describe()
- 返回Series中不重复的值
- s.unique()
- 判断索引是否重复
- s.index.is_unique
- 判断元素是否在Series中
- s.isin(元素列表)
- 查看形状
- 子数据选择
- 通过标签选择子数据(行)
- data.loc[‘20150813’:‘20150921’]
- 通过标签选择子数据
- data.loc[行标签列表,列标签列表]
- 通过数字索引选择子数据
- data.iloc[2:5]
- 通过索引标签访问单个位置值
- data.at[行索引,列索引] # 索引为pandas原生数据结构
- 通过索引编号方位单个位置值
- data.iat[1,3]
- data[data>0]
- 通过标签选择子数据(行)
- 增
- 深拷贝
- data.copy()
- 添加新的列
- data[‘新的列名(之前没有)’] = 元素列表
- 拼接
- pd.concat(多个DataFrame列表)
- pd.merge(df1,df2, on=‘属性名’) # 按属性名拼接
- left_on = ‘列名’ # 通过索引进行外连接
- right_index = True # 保留右表索引
- 插入数据
- df.append(s, ignore_index=True/False)
- df.insert(位置索引,‘插入的列名’, 插入列表) # 改变原表
- df.assign(新列名=列值列表)
- 深拷贝
- 删除
- def df[‘列名’]
- df.pop(‘列名’)
- 修改
- 以上取出的值都为索引,可以直接赋值修改
- 赋值单个常量,即所有元素都赋值为该常量
- 赋值数组必须长度匹配
- 行索引和列索引转换
- df.stack()/unstack()
- 为列名添加前缀
- df.add_prefix(‘前缀’)
- 空值
- 删除有空数据的行
- df.dropna()
- 填充空数据
- df.fillna(value=0)
- 判断是否有空数据
- pd.isnull(df).any().any()
- 空值不参与计算
- 删除有空数据的行
- 基本运算
- 平均值
- df.mean(axis=)
- 累加值
- df.cumsum()
- 减法
- df.sub(s, axis=)
- 若s只有一行或一列,则每一行/列都减去s
- df.sub(s, axis=)
- 求和
- df.sum((level=) # 若有多级可加入level参数
- 数据转置
- data.T
- 兼容所有numpy计算
- 平均值
- 排序
- 根据列标签排序
- data.sort_index(axis=1, ascending=True#默认)
- 根据行标签排序
- data.sort_index(axis=0)
- 通过某列的值进行排序
- data.sort_values(by=‘列名’)
- 计算Series中值的排名
- s.rank(method=‘first’/‘average’)
- 根据列标签排序
- 函数应用
- 对每一列/行应用函数
- df.apply(函数,axis=)
- 对所有值应用函数
- df.applymap(fun)
- 对每一列/行应用函数
- 索引
- 重新索引
- df.reindex(index=索引列表,colomns = list(df.colomns)#数据列表(, fill_value=)(, method=‘ffill’/‘bfill’))
- 创建多级索引
- a = [[‘a’, ‘a’, ‘a’, ‘b’, ‘b’, ‘c’, ‘c’],[1, 2, 3, 1, 2, 2, 3]]
- t = list(zip(*a))
- index = pd.MultiIndex.from_tuples(t, names=[‘l1’, ‘l2’])
- 交换级索引
- df.swaplevel(‘l1’, ‘l2’)
- 根据第几级索引排序
- df.sortlevel(num)
- 重新索引
- 分组
- df.groupby(索引列表).sum()
- 支持迭代
- for 组名, 组 in df.groupby(索引列表):
- 通过字典映射分组
- mapping =
- df.groupby(mapping, axis =1)
- 通过函数分组
- df.groupby(len)
- 通过级分组
- df.groupby(level=, axis= )
- 聚合函数
- 内置聚合函数
- df.groupby().describe() # 包含所有内置函数结果
- df.groupby().min()
- df.groupby().max()
- df.groupby().mean()
- df.groupby().sum()
- 自定义聚合函数
- def peak_range(s):return s.max - s.min()
- grouped.agg(peak_range)
- 应用多个聚合函数
- 对整个df
- grouped.agg([‘std’, ‘mean’, ‘sum’, (‘range’,peak_range)]) # 函数名称即列名称,否则传入(‘列名’,函数)元组自定义列名
- 不同列应用不同的聚合函数
- 传递字典
- d =
- grouped.agg(g)
- 对整个df
- 聚合不把key作为索引
- groupby(key, as_index=False).agg(d) # 加入as_index
- 调用groupby().transform(聚合函数)
- 内置聚合函数
- 查看
- Series (一行或一列)
-
文件
- csv
- pd.to_csv(’*.csv’)
- pd.read_csv(’*.csv’, index_col = 0)
- 参数
- 定义空值:na_values=
- 读取指定行数:nrows=
- 一次读多少行(返回迭代器)
- chunksize=
- 参数
- .dat
- pd.read_table(‘filename.dat’, sep=, header =, names=, index_col=)
- HDF5
- Excel
- JSON
- NoSQL
- csv
-
时间序列
- 基础:python的datetime
- 创建日期序列
- pd.date_range(‘20190901’, periods=7, normalize=True, freq=‘24H’) # 包含从20190901及其以后7个间隔为24h(默认)的序列,并只保留到日
- 时期
- pd.Period(2010)
- 创建时期序列
- pd.period_range(‘20190901’, periods=7 , freq=‘24H’)
- 频率转换
- pd.Period.asfreq(‘频率标识’)
- 重采样
- ts.resample(‘5min’, how=‘sum’ label=‘left’/‘right’)
- 统计开盘收盘
- how=‘ohlc’
-
数据可视化
- notebook内显示
- %matplotlib inline
- 线型图
- .plot(title=’’, style=’’, figsize=(,), subplot=True/False)
- 柱状图
- .plot.bar()
- 直方图
- .hist(bins=多少等分)
- 概率密度
- .plot.kde()
- 散点图
- .plot.scatter()
- 饼图
- .plot.pie()
- notebook内显示