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根据文件大小打log日志
Oct 09 Python
python smtplib模块发送SSL/TLS安全邮件实例
Apr 08 Python
用Python中的字典来处理索引统计的方法
May 05 Python
python中返回矩阵的行列方法
Apr 04 Python
在python win系统下 打开TXT文件的实例
Apr 29 Python
selenium+python实现自动化登录的方法
Sep 04 Python
利用Python实现手机短信监控通知的方法
Jul 22 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
如何用OpenCV -python3实现视频物体追踪
Dec 04 Python
Django之form组件自动校验数据实现
Jan 14 Python
Python爬虫基础之爬虫的分类知识总结
May 13 Python
Python何绘制带有背景色块的折线图
Apr 23 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开发者的10个技巧
2011/02/25 PHP
php中单个数据库字段多列显示(单字段分页、横向输出)
2014/07/28 PHP
百度工程师讲PHP函数的实现原理及性能分析(一)
2015/05/13 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
浅谈php中urlencode与rawurlencode的区别
2016/09/05 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
php面向对象基础详解【星际争霸游戏案例】
2020/01/23 PHP
JavaScript调用Activex控件的事件的实现方法
2010/04/11 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
Nodejs中crypto模块的安全知识讲解
2018/01/03 NodeJs
React Native 图片查看组件的方法
2018/03/01 Javascript
快速解决处理后台返回json数据格式的问题
2018/08/07 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
Node.js API详解之 repl模块用法实例分析
2020/05/25 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
JSON 入门教程基础篇 json入门学习笔记
2020/09/22 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
python查询sqlite数据表的方法
2015/05/08 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python的Asyncore异步Socket模块及实现端口转发的例子
2016/06/14 Python
用python代码将tiff图片存储到jpg的方法
2018/12/04 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
在Pandas中处理NaN值的方法
2019/06/25 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
用python查找统一局域网下ip对应的mac地址
2021/01/13 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
使用phonegap检测网络状态的方法
2017/03/30 HTML / CSS
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
印度手工编织服装和家居用品商店:Fabindi
2019/10/07 全球购物
双立人加拿大官网:Zwilling加拿大
2020/08/10 全球购物
出纳员岗位职责
2014/03/13 职场文书
升旗仪式主持词
2014/03/19 职场文书
公司试用期员工自我评价
2014/09/17 职场文书
百家讲坛观后感
2015/06/12 职场文书
jquery插件实现悬浮的菜单
2021/04/24 jQuery