Python学习笔记之pandas索引列、过滤、分组、求和功能示例


Posted in Python onJune 03, 2019

本文实例讲述了Python学习笔记之pandas索引列、过滤、分组、求和功能。分享给大家供大家参考,具体如下:

解析html内容,保存为csv文件
//3water.com/article/162401.htm

前面我们已经把519961(基金编码)这种基金的历史净值明细表html内容抓取到了本地,现在我们还是需要 解析html,取出相关的值,然后保存为csv文件以便pandas来统计分析。

from bs4 import BeautifulSoup
import os
import csv
# 使用 BeautifulSoup 解析html内容
def getFundDetailData(html):
  soup = BeautifulSoup(html,"html.parser")
  rows = soup.find("table").tbody.find_all("tr")
  result = []
  for row in rows:
    tds=row.find_all('td')
    result.append({"fcode": '519961'
            ,"fdate": tds[0].get_text()
           , "NAV": tds[1].get_text()
           , "ACCNAV": tds[2].get_text()
           , "DGR": tds[3].get_text()
           , "pstate":tds[4].get_text()
           , "rstate": tds[5].get_text()
           }
         )
  return result
# 把解析之后的数据写入到csv文件
def writeToCSV():
  data_dir = "../htmls/details"
  all_path = os.listdir(data_dir)
  all_result = []
  for path in all_path:
    if os.path.isfile(os.path.join(data_dir,path)):
      with open(os.path.join(data_dir,path),"rb") as f:
        content = f.read().decode("utf-8")
        f.close()
        all_result = all_result + getFundDetailData(content)
  with open("../csv/519961.csv","w",encoding="utf-8",newline="") as f:
    writer = csv.writer(f)
    writer.writerow(['fcode', 'fdate', 'NAV', "ACCNAV", 'DGR', 'pstate', "rstate"])
    for r in all_result:
      writer.writerow([r["fcode"], r["fdate"], r["NAV"], r["ACCNAV"], r["DGR"], r["pstate"], r["rstate"]])
    f.close()
# 执行
writeToCSV()

pandas 排序、索引列

# coding: utf-8
import pandas
if __name__ == "__main__" :
  # 读取csv文件 创建pandas对象
  pd = pandas.read_csv("./csv/519961.csv", dtype={"fcode":pandas.np.str_}, index_col="fdate") # 把 fdate 这列设置为 索引列
  # 根据索引列 倒序
  print(pd.sort_index(ascending=False))

既然fdate列设置为了索引列,那么如果根据索引获取呢?

# 读取csv文件 创建pandas对象
pd = pandas.read_csv("./csv/519961.csv", dtype={"fcode":pandas.np.str_}, index_col="fdate") # 把 fdate 这列设置为 索引列
pd.index = pandas.to_datetime(pd.index)
print(pd["2017-11-29 "]) # 2017-11-29 519961 1.189  1.189 -1.00% 限制大额申购  开放赎回

2、直接指定fdate列就是日期类型

# 读取csv文件 创建pandas对象
pd = pandas.read_csv("./csv/519961.csv", dtype={"fcode":pandas.np.str_}, index_col="fdate", parse_dates=["fdate"]) # 指明fdate是日期类型
print(pd["2017-11-29 "]) # 2017-11-29 519961 1.189  1.189 -1.00% 限制大额申购  开放赎回

打印索引:

print(pd.index) # 打印 索引

可以看出是DatetimeIndex的索引:

DatetimeIndex(['2015-08-13', '2015-08-12', '2015-08-11', '2015-08-10',
        '2015-08-07', '2015-08-06', '2015-08-05', '2015-08-04',
        '2015-08-03', '2015-07-31',
        ...
        '2015-07-02', '2015-07-01', '2015-06-30', '2015-06-29',
        '2015-06-26', '2015-06-25', '2015-06-24', '2015-06-23',
        '2015-06-19', '2015-06-18'],
       dtype='datetime64[ns]', name='fdate', length=603, freq=None)

3、索引的高级用法

# 取出 2017年7月的 全部数据
print(pd["2017-07"])
# 取出 2017年7月到9月的 数据
print(pd["2017-07":"2017-09"])
# 到2015-07的数据
print(pd[:"2015-07"])
# 取出截至到2015-07的数据
# 然后 倒序
print(pd[:"2015-7"].sort_index(ascending=False))

获取基金日增长率下跌次数最多的月份

result = pd[pd["DGR"].notnull()] # DGR一定要有值
# 过滤掉DGR值里的%号,最后取出小于0的值(负数就表示增长率下跌了 )
result = result[result['DGR'].str.strip("%").astype(pandas.np.float)<0]
# 按照月份 统计DGR跌的次数
result = result.groupby(lambda d:d.strftime("%Y-%m")).size()
# 对DGR跌的次数 倒序,然后取出前面第一个
result = result.sort_values(ascending=False).head(1)
print(result) # 2016-04  12 意思就是2016年4月份 是该基金DGR下跌次数最多的月份

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python使用urllib模块开发的多线程豆瓣小站mp3下载器
Jan 16 Python
bat和python批量重命名文件的实现代码
May 19 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
Python+OpenCV采集本地摄像头的视频
Apr 25 Python
Django自定义用户登录认证示例代码
Jun 30 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
Python 转换文本编码实现解析
Aug 27 Python
Python实现PyPDF2处理PDF文件的方法示例
Sep 25 Python
python sorted函数原理解析及练习
Feb 10 Python
Python BeautifulReport可视化报告代码实例
Apr 13 Python
python 动态绘制爱心的示例
Sep 27 Python
Pytorch中的学习率衰减及其用法详解
Jun 05 Python
Python学习笔记之抓取某只基金历史净值数据实战案例
Jun 03 #Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 #Python
Python3 实现文件批量重命名示例代码
Jun 03 #Python
我就是这样学习Python中的列表
Jun 02 #Python
Python3内置模块pprint让打印比print更美观详解
Jun 02 #Python
python实现感知机线性分类模型示例代码
Jun 02 #Python
python调用摄像头拍摄数据集
Jun 01 #Python
You might like
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
探讨:使用XMLSerialize 序列化与反序列化
2013/06/08 PHP
PHP CURL post数据报错 failed creating formpost data
2016/10/16 PHP
thinkPHP简单调用函数与类库的方法
2017/03/15 PHP
关于使用runtimeStyle属性问题讨论文章
2007/03/08 Javascript
prototype 学习笔记整理
2009/07/17 Javascript
JavaScript中的私有/静态属性介绍
2012/07/26 Javascript
js实现将选中值累加到文本框的方法
2015/08/12 Javascript
浅谈javascript基础之客户端事件驱动
2016/06/10 Javascript
遍历js中对象的属性和值的实例
2016/11/21 Javascript
vuejs2.0实现分页组件使用$emit进行事件监听数据传递的方法
2017/02/22 Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
2017/07/24 Javascript
vue中使用localstorage来存储页面信息
2017/11/04 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
webpack4 升级迁移的实现
2018/09/12 Javascript
React性能优化系列之减少props改变的实现方法
2019/01/17 Javascript
浅析Python 中整型对象存储的位置
2016/05/16 Python
遗传算法之Python实现代码
2017/10/10 Python
PyTorch的自适应池化Adaptive Pooling实例
2020/01/03 Python
python实现斗地主分牌洗牌
2020/06/22 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
aden + anais官方网站:婴儿襁褓、毯子、尿布和服装
2017/06/21 全球购物
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
集体备课反思
2014/02/12 职场文书
护士节慰问信
2015/02/15 职场文书
2015年秋季学校开学标语
2015/07/16 职场文书
护士旷工检讨书
2015/08/15 职场文书
2016年母亲节广告语
2016/01/28 职场文书
Nginx快速入门教程
2021/03/31 Servers
使用Django实现商城验证码模块的方法
2021/06/01 Python
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript
MySQL的InnoDB存储引擎的数据页结构详解
2022/03/03 MySQL
关于Python使用turtle库画任意图的问题
2022/04/01 Python
JS前端可扩展的低代码UI框架Sunmao使用详解
2022/07/23 Javascript