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 相关文章推荐
phpsir 开发 一个检测百度关键字网站排名的python 程序
Sep 17 Python
python模块之paramiko实例代码
Jan 31 Python
Python实现的自定义多线程多进程类示例
Mar 23 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
使用Python微信库itchat获得好友和群组已撤回的消息
Jun 24 Python
NumPy 数学函数及代数运算的实现代码
Jul 18 Python
Python爬虫抓取技术的一些经验
Jul 12 Python
python实现大量图片重命名
Mar 23 Python
python 装饰器功能与用法案例详解
Mar 06 Python
python用TensorFlow做图像识别的实现
Apr 21 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
一些关于python 装饰器的个人理解
Aug 31 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
一个程序下载的管理程序(二)
2006/10/09 PHP
php生成二维码时出现中文乱码的解决方法
2014/12/18 PHP
PHP 中 Orientation 属性判断上传图片是否需要旋转
2015/10/16 PHP
PHP SESSION跨页面传递失败解决方案
2020/12/11 PHP
把input初始值不写value的具体实现方法
2013/07/04 Javascript
Jquery 获取指定标签的对象及属性的设置与移除
2014/05/29 Javascript
使用jQuery判断IE浏览器版本的代码
2014/06/14 Javascript
JQuery设置获取下拉菜单某个选项的值(比较全)
2014/08/05 Javascript
详解JavaScript中的blink()方法的使用
2015/06/08 Javascript
Vue中使用vux的配置详解
2017/05/05 Javascript
jQuery实现全选、反选和不选功能
2017/08/16 jQuery
webpack 插件html-webpack-plugin的具体使用
2018/04/09 Javascript
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
详解vue中使用protobuf踩坑记
2019/05/07 Javascript
vue 中 elment-ui table合并上下两行相同数据单元格
2019/12/26 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
python实现批量修改文件名代码
2017/09/10 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
Python学生信息管理系统修改版
2018/03/13 Python
Python socket实现多对多全双工通信的方法
2019/02/13 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
Python绘制二维曲线的日常应用详解
2019/12/04 Python
解决python -m pip install --upgrade pip 升级不成功问题
2020/03/05 Python
阿迪达斯意大利在线商店:adidas意大利
2016/09/19 全球购物
世界上最大的糖果店:Dylan’s Candy Bar
2017/11/07 全球购物
StubHub意大利:购买和出售全球演唱会和体育赛事门票
2017/11/21 全球购物
介绍一下grep命令的使用
2015/06/12 面试题
食品营养与检测应届生求职信
2013/11/08 职场文书
敬老文明号事迹材料
2014/01/16 职场文书
新任教师自我鉴定
2014/02/24 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
男方婚礼答谢词
2015/01/20 职场文书
黄河绝恋观后感
2015/06/08 职场文书
golang协程池模拟实现群发邮件功能
2021/05/02 Golang