使用pandas的部分问题汇总
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的部分问题汇总的更多相关文章
- pandas知识点脑图汇总
参考文献: [1]Pandas知识点脑图汇总
- pandas(三)汇总和计算描述统计
pandas对象有一些常用的数学和统计的方法,大部分都属于约简或汇总统计. SUM方法 DataFrame对象的sum方法,返回一个含有列小计的Series >>> df = Dat ...
- 用Python的pandas框架操作Excel文件中的数据教程
用Python的pandas框架操作Excel文件中的数据教程 本文的目的,是向您展示如何使用pandas 来执行一些常见的Excel任务.有些例子比较琐碎,但我觉得展示这些简单的东西与那些你可以在其 ...
- Python_科学计算平台__pypi体系的numpy、scipy、pandas、matplotlib库简介
1.numpy--基础,以矩阵为基础的数学计算模块,纯数学 存储和处理大型矩阵. 这个是很基础的扩展,其余的扩展都是以此为基础. 快速学习入口 https://docs.scipy.org/doc/n ...
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
pandas 对象拥有一些常用的数学和统计方法. 例如,sum() 方法,进行列小计: sum() 方法传入 axis=1 指定为横向汇总,即行小计: idxmax() 获取最大值对应的索 ...
- 【学习】数据处理基础知识(汇总和计算描述统计)【pandas】
pd对象拥有一组常用的数学和统计方法.大部分都属于约简和汇总统计,用于从Series中单个值,如sum 和 mean 或从DF的行或列中提取一个Series. 1. 描述和汇总统计方法 #汇总和计算描 ...
- Pandas基本功能之层次化索引及层次化汇总
层次化索引 层次化也就是在一个轴上拥有多个索引级别 Series的层次化索引 data=Series(np.random.randn(10),index=[ ['a','a','a','b','b', ...
- Pandas汇总和处理缺失数据
汇总的函数 方法 说明 count 非NA的值数量 describe 针对Series和DataFrame列计算汇总统计 min.max 计算最小值和最大值 argmin.argmax 计算能够获取到 ...
- pandas汇总和计算描述统计
pandas 对象拥有一组常用的数学和统计方法. 他们大部分都属于简约和汇总统计, 用于从Series中提取单个值(如sum或mean) 或从DataFrame的行或列中提取一个Series.跟对应的 ...
随机推荐
- DELPHI中完成端口(IOCP)的简单分析(4)
DELPHI中完成端口(IOCP)的简单分析(4) 在我以前写的文章中,一直说的是如何接收数据.但是对于如何发送数据却一点也没有提到.因为从代码量上来说接收的代码要比发送多很多.今天我就来写一下如 ...
- 14.0-uC/OS-III挂起队列
1.当任务等待信号量. mutex.事件标志组.消息队列时,该任务会被放入挂起队列. 挂起队列是一个OS_PEND_LIST类型的数据结构,它包含了三部分内容. .NbrEntries 挂起队列中有几 ...
- 【English】【托业】【四六级】写译高频词汇
大家都知道,四六级翻译每次考的话题不可能原句直接重复,但是,在研究了近几年的四六级真题后,我们惊奇地发现: 写译词汇在重复考! 写译词汇在重复考! 写译词汇在重复考! 因此,小编为大家整理了四六级写译 ...
- python进阶之 网络编程
1.tcp和udp协议的区别 TCP协议 面向连接\可靠\慢\对传递的数据的长短没有要求 两台机器之间要想传递信息必须先建立连接 之后在有了连接的基础上,进行信息的传递 可靠 : 数据不会丢失 不会重 ...
- linux安装lamp/lamp/lanmp
wdcp安装lamp/lanp/lanmp 和宝塔(centOS)1. yum install -y wget //yum安装wegt2. wget http://dl.wdlinux.cn/fil ...
- vue中使用scss
之前项目里我一般是使用less的,朋友问到如何引入scss,于是我就简单的跑了一下,以下主要供自己学习,如有更好的方法可以一起交流讨论一下 第一步,安装依赖 cnpm install node-sas ...
- centos上部署应用到tomcat
tomcat部署JavaWeb项目分为下面的步骤: 1.删除tomcat按照目录的ROOT文件夹下的所有文件 2.把war包复制到ROOT文件下面,解压缩:jar -xvf xxxx.war; 3.结 ...
- 百度富文本Ueditor编辑器的使用
往在web开发的时候,尤其是在网站开发后台管理系统的时候经常会使用到富文本编辑器,这里我们来使用百度提供的富文本编辑器UEditor,以提高我们的开发效率 UEditor官网下载地址:https:// ...
- JaCoCo在Tomcat服务器上监控代码覆盖率的使用方法
简介 Jacoco是一个开源的覆盖率工具.Jacoco可以嵌入到Ant .Maven中,并提供了EclEmma Eclipse插件,也可以使用JavaAgent技术监控Java程序.很多第三方的工具提 ...
- axf 文件包含太多的调试信息,导致的编译错误
构建工程时,提示: build\my_test_prj.axf: Error: L6291E: Cannot assign Fixed Execution Region MCU_FLASH1 Load ...