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捕捉和模拟鼠标事件的方法
Jun 03 Python
在Django框架中伪造捕捉到的URLconf值的方法
Jul 18 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
Python网络编程基于多线程实现多用户全双工聊天功能示例
Apr 10 Python
python中for用来遍历range函数的方法
Jun 08 Python
Flask框架URL管理操作示例【基于@app.route】
Jul 23 Python
python查看模块安装位置的方法
Oct 16 Python
Python获取航线信息并且制作成图的讲解
Jan 03 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
pytorch实现ResNet结构的实例代码
May 17 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作为Shell脚本语言使用
2006/10/09 PHP
PHP新手上路(七)
2006/10/09 PHP
php图片验证码代码
2008/03/27 PHP
PHP获取昨天、今天及明天日期的方法
2016/02/03 PHP
PHP实现上传多文件示例代码
2017/02/20 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
番茄的表单验证类代码修改版
2008/07/18 Javascript
jquery插件 cluetip 关键词注释
2010/01/12 Javascript
js中一个函数获取另一个函数返回值问题探讨
2013/11/21 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
JavaScript &amp; jQuery完美判断图片是否加载完毕
2017/01/08 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
vue进行图片的预加载watch用法实例讲解
2018/02/07 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
浅谈vue项目可以从哪些方面进行优化
2018/05/05 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
2020/11/07 Javascript
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
python计算圆周率pi的方法
2015/07/11 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
单位单身证明范本
2014/01/11 职场文书
小学运动会表扬稿
2014/01/19 职场文书
奥运会口号
2014/06/13 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
党员作风建设自查报告
2014/10/23 职场文书
学生通报表扬范文
2015/05/04 职场文书
导游词之台湾安平古堡
2019/12/25 职场文书