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微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
Aug 21 Python
Python3中详解fabfile的编写
Jun 24 Python
python代码编写计算器小程序
Mar 30 Python
python实现windows倒计时锁屏功能
Jul 30 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
python爬虫 2019中国好声音评论爬取过程解析
Aug 26 Python
django中的图片验证码功能
Sep 18 Python
Python利用matplotlib绘制约数个数统计图示例
Nov 26 Python
Python运行DLL文件的方法
Jan 17 Python
Python实现进度条和时间预估的示例代码
Jun 02 Python
Python正则表达式高级使用方法汇总
Jun 18 Python
15款Python编辑器的优缺点,别再问我“选什么编辑器”啦
Oct 19 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中比较简单的导入phpmyadmin生成的sql文件的方法
2011/06/28 PHP
简单的php写入数据库类代码分享
2011/07/26 PHP
php如何连接sql server
2015/10/16 PHP
IOS 开发之NSDictionary转换成JSON字符串
2017/08/14 PHP
php实现 master-worker 守护多进程模式的实例代码
2019/07/20 PHP
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
jQuery ajax调用后台aspx后台文件的两种常见方法(不是ashx)
2016/06/28 Javascript
学习JavaScript图片预加载模块
2016/11/07 Javascript
js编写三级联动简单案例
2016/12/21 Javascript
详解JS中的快速排序与冒泡
2017/01/10 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
Js apply方法详解
2017/02/16 Javascript
bootstrap实现的自适应页面简单应用示例
2017/03/09 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
JavaScript简单计算人的年龄示例
2017/04/15 Javascript
QRCode.js二维码生成并能长按识别
2018/10/16 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
js实现单元格拖拽效果
2020/02/10 Javascript
详解python中requirements.txt的一切
2017/03/03 Python
Python中xrange与yield的用法实例分析
2017/12/26 Python
浅析python实现scrapy定时执行爬虫
2018/03/04 Python
tensorflow 使用flags定义命令行参数的方法
2018/04/23 Python
以SQLite和PySqlite为例来学习Python DB API
2020/02/05 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
python time()的实例用法
2020/11/03 Python
时尚的CSS3进度条效果
2012/02/22 HTML / CSS
探索HTML5本地存储功能运用技巧
2016/03/02 HTML / CSS
味多美官网:蛋糕订购,100%使用天然奶油
2017/11/10 全球购物
世界上获奖最多的手机镜头:Olloclip
2018/03/03 全球购物
Booking.com英国官网:全球酒店在线预订网站
2018/04/21 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
介绍一下Java中的static关键字
2012/05/12 面试题
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)
2014/04/23 面试题
主题婚礼策划方案
2014/02/10 职场文书
小学家长学校培训材料
2014/08/24 职场文书
平凡的世界读书笔记
2015/06/25 职场文书