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监控网卡流量并使用graphite绘图的示例
Apr 27 Python
Python中使用SAX解析xml实例
Nov 21 Python
python通过openpyxl生成Excel文件的方法
May 12 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
python使用itchat实现手机控制电脑
Feb 22 Python
python 正确保留多位小数的实例
Jul 16 Python
Python中的元组介绍
Jan 28 Python
基于python实现的百度新歌榜、热歌榜下载器(附代码)
Aug 05 Python
Python 一行代码能实现丧心病狂的功能
Jan 18 Python
python3中使用__slots__限定实例属性操作分析
Feb 14 Python
Windows下PyCharm配置Anaconda环境(超详细教程)
Jul 31 Python
python使用BeautifulSoup 解析HTML
Apr 24 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开发文件系统实例讲解
2006/10/09 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
分享别人写的一个小型js框架
2007/08/13 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
使用angular写一个hello world
2015/01/23 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
JS锚点的设置与使用方法
2016/09/05 Javascript
JS遍历ul下的li点击弹出li的索引的实现方法
2016/09/19 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
JS实现隔行换色的表格排序
2017/03/27 Javascript
bootstrap时间控件daterangepicker使用方法及各种小bug修复
2017/10/25 Javascript
mui框架 页面无法滚动的解决方法(推荐)
2018/01/25 Javascript
iview table高度动态设置方法
2018/03/14 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
webpack项目轻松混用css module的方法
2018/06/12 Javascript
angular6的table组件开发的实现示例
2018/12/26 Javascript
js中对象和面向对象与Json介绍
2019/01/21 Javascript
javaScript中indexOf用法技巧
2019/11/26 Javascript
python数据结构之链表的实例讲解
2017/07/25 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
pyqt5 键盘监听按下enter 就登陆的实例
2019/06/25 Python
PyQt5使用QTimer实现电子时钟
2019/07/29 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
详解Html5中video标签那些属性和方法
2019/07/01 HTML / CSS
国培教师自我鉴定
2014/02/12 职场文书
求职个人评价范文
2014/04/09 职场文书
学校文明单位申报材料
2014/05/06 职场文书
共产党员公开承诺践诺书
2014/05/28 职场文书
党的生日活动方案
2014/08/15 职场文书
职业生涯规划书怎么写?
2014/09/14 职场文书
个人反四风对照检查材料思想汇报
2014/09/23 职场文书
公司感恩节活动策划书
2014/10/11 职场文书
医药公司采购员岗位职责
2015/04/03 职场文书
CSS3点击按钮圆形进度打钩效果的实现代码
2021/03/30 HTML / CSS
关于CSS浮动与取消浮动的问题
2021/06/28 HTML / CSS