pandas(我所用版本0.17)是一个强大数据处理库,在开发金融类系统中我应用到了pandas.Dataframe数据类型,它的数据结构类似一张图表(如下图所示),左边一列为index既行的索引:

             图1

下面主要介绍在开发中使用方法:

1,DataFrame将1分钟K线数据合成5分钟数据

pd_1m = pd.DataFrame() #已有1分钟K线数据
#合成新K线的前提是df的数据的index必须是时间
pd_1m = pd_1m.set_index('kline_time') #将时间戳设置为index
#设置df数据中每列的规则
ohlc_rule = {
'open': 'first',#open列:序列中第一个的值
'high': 'max',#high列:序列中最大的值
'low': 'min',#low列:序列中最小的值
'close': 'last',#close列:序列中最后一个的值
'volume': 'sum',#volume列:将所有序列里的volume值作和
'amount': 'sum'#amount列:将所有序列里的amount值作和
}
#合成5分钟K线并删除为空的行 参数 closed:left类似向上取值既 09:30的k线数据是包含09:30-09:35之间的数据
pd_5m = pd_1m.resample('5min', how=ohlc_rule, closed='left', label='left').dropna(axis=0, how='any')
#dropna(axis=0, how='any') axis参数0:针对行进行操作 1:针对列进行操作 how参数any:只要包含就删除 all:全是为NaN才删除

2,DataFrame的行遍历及过滤

import pandas as pd
import numpy as np dates = pd.date_range('2020-01-01',periods=6)
df = pd.DataFrame(np.random.rand(6,4),index=dates,columns=['a','b','c','d']) # iloc根据行号来取值
print(df.iloc[3]) # 第三行
print(df.iloc[1:4]) # 左闭右开
# loc根据行头来取值 此数据行头是日期
print(df.loc["2020-01"]) # 行头包含2020-01字符串的所有行
print(df.loc["2020-01-02": "2020-01-04",["b","c"]]) # 行头再这个范围内 可指定显示某几列
# 根据列来筛选
print(df["a"]) # 获取单列
print(df[["a","b"]]) # 获取多列
# 以下根据条件筛选也可用于loc函数中
print(df[df['a']>0]) # a列数据大于0的行筛选出来
print(df[~df['a'].isin([2,3,5])]) # ~表示不满足该条件的其他数据 isin表示在某个list中
print(df[(df['a'].isin([2, 3])) & (df['b'] != 0)]) # &与;|表示或 ;运算符:!=不等于 == > < 以此类推等等
# df行遍历
for index,row in enumerate(df.iterrows()):
# row既每行,包含行头及行数据
print(index,row[0],row[1])

3,pandas中转化数据及变更类型

import pandas as pd
import numpy as np # 整理,格式化数据
dates = pd.date_range('2020-01-01',periods=6)
df = pd.DataFrame(np.random.rand(6,4),index=dates,columns=['a','b','c','d'])
df["e"] = pd.Series([1,1,3,4,4,2],index=dates) # apply根据用户执行axis来计算得到新行/列数据 1=列 默认行0
f_col = df.apply(lambda k: k['a']*k['b'] if k['c'] >0.5 else k['a']*k['c'], axis=1) # map是Series的函数通过mapping来生成新的数据行/列 可以使用dict,也可函数
print(df["e"].map({1: 9}))
print(df["e"].map(lambda x: 0 if x > 3 else 1)) # applymap 处理全部的行业数据
def cal_custom(data):
return float("%.2f" % data)
print(df.applymap(cal_custom)) # 在统计分析中会用到变量类型装换 需要转为分类型变量
z = pd.Series([3,4,6,6,4])
z = z.astype("category") # 分类型变量(分类型变量本身可以是数字格式)
# 转换为数字类型
pd.to_numeric(z, errors='coerce') # ignore
# 指定分类型变量为指定顺序的有序分类型变量
print(z.cat.reorder_categories([4,6,3]))
# pandas中pandas.tslib.Timestamp的计算及转换
dtime = pandas.tslib.Timestamp()
dtime = dtime + np.timedelta64(8, 'h')#给时间加上8小时 np为numpy 参数 h 小时 m 分钟
dtime = dtime.strftime('%Y-%m-%d %H:%M:%S')#转换为字符格式

4,其他

print(df.cov()) # 协方差矩阵
print(df.corr()) # 相关系数矩阵
print(df.corrwith(df["a"])) # 某列与其他列的相关系数结果
print(df.groupby(["a","b"]).agg(['mean','std','count','max','sum'])) # std标准差

以上主要为开发问题中遇到的场景,有局限性,希望大家能用上~

使用pandas的部分问题汇总的更多相关文章

  1. pandas知识点脑图汇总

    参考文献: [1]Pandas知识点脑图汇总

  2. pandas(三)汇总和计算描述统计

    pandas对象有一些常用的数学和统计的方法,大部分都属于约简或汇总统计. SUM方法 DataFrame对象的sum方法,返回一个含有列小计的Series >>> df = Dat ...

  3. 用Python的pandas框架操作Excel文件中的数据教程

    用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...

  4. Python_科学计算平台__pypi体系的numpy、scipy、pandas、matplotlib库简介

    1.numpy--基础,以矩阵为基础的数学计算模块,纯数学 存储和处理大型矩阵. 这个是很基础的扩展,其余的扩展都是以此为基础. 快速学习入口 https://docs.scipy.org/doc/n ...

  5. 利用Python进行数据分析(9) pandas基础: 汇总统计和计算

    pandas 对象拥有一些常用的数学和统计方法.   例如,sum() 方法,进行列小计:   sum() 方法传入 axis=1 指定为横向汇总,即行小计:   idxmax() 获取最大值对应的索 ...

  6. 【学习】数据处理基础知识(汇总和计算描述统计)【pandas】

    pd对象拥有一组常用的数学和统计方法.大部分都属于约简和汇总统计,用于从Series中单个值,如sum 和 mean 或从DF的行或列中提取一个Series. 1. 描述和汇总统计方法 #汇总和计算描 ...

  7. Pandas基本功能之层次化索引及层次化汇总

    层次化索引 层次化也就是在一个轴上拥有多个索引级别 Series的层次化索引 data=Series(np.random.randn(10),index=[ ['a','a','a','b','b', ...

  8. Pandas汇总和处理缺失数据

    汇总的函数 方法 说明 count 非NA的值数量 describe 针对Series和DataFrame列计算汇总统计 min.max 计算最小值和最大值 argmin.argmax 计算能够获取到 ...

  9. pandas汇总和计算描述统计

    pandas 对象拥有一组常用的数学和统计方法. 他们大部分都属于简约和汇总统计, 用于从Series中提取单个值(如sum或mean) 或从DataFrame的行或列中提取一个Series.跟对应的 ...

随机推荐

  1. 基于 redis 的分布式锁实现 Distributed locks with Redis debug 排查错误

    小结: 1. 锁的实现方式,按照应用的实现架构,可能会有以下几种类型: 如果处理程序是单进程多线程的,在 python下,就可以使用 threading 模块的 Lock 对象来限制对共享变量的同步访 ...

  2. 好用的 over the wall教程

    还在为翻 xxx墙苦恼吗,一分钟就能搞定的翻xxx墙教程 1.下载chrome扩展插件 Proxy SwitchyOmega,加入到谷歌的高级扩展程序当中,这个就不详细讲解了. 请戳 https:// ...

  3. 删除64位ODBC数据源DNS

    1.按照打开管理工具-打开数据源(ODBC),进入如下界面,选择用户DSN删除,发现报错一直删除不了. 2.成功删除:进入如下图路径,打开ODBC数据源管理工具,选择要删除的DSN就可以成功删除啦.

  4. JDK8新增接口的默认方法与静态方法

    JDK8之前,interface中可以定义常量和抽象方法,访问修饰符是public. public interface A { /** a1和a2写法是等价的 */ public static fin ...

  5. Java学习之路-Hessian学习

    Hessian是基于HTTP的轻量级远程服务解决方案,Hessian像Rmi一样,使用二进制消息进行客户端和服务器端交互.但与其他二进制远程调用技术(例如Rmi)不同的是,它的二进制消息可以移植其他非 ...

  6. Hash算法和一致性Hash算法

    Hash算法 我们对同一个图片名称做相同的哈希计算时,得出的结果应该是不变的,如果我们有3台服务器,使用哈希后的结果对3求余,那么余数一定是0.1或者2,正好与我们之前的服务器编号相同,如果求余的结果 ...

  7. javaweb(1)之tomcat使用

    安装 1.点击下载. 2.解压到一个目录. 3.进入解压后的 bin 目录,双击该文件夹下的 startup.bat 即可运行. 4.若运行成功,会有一个窗口悬停如下: 访问地址: localhost ...

  8. java之jdbc使用

    简单使用 Statement 通过 Statement 执行 ,其实是拼接 sql 语句的.  先拼接 sql 语句,然后在一起执行. package com.zze.test; import jav ...

  9. phpstorm 破解版

    原链接https://blog.csdn.net/gu_wen_jie/article/details/79136475

  10. hbase 快速开发

    hbase是一个分布式的NoSQL,部署起来配置很多东西,开发起来太慢,可以使用docker快速搭建环境 gs@gs-virtual-machine:~$ sudo docker run -ti ha ...