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内置的字符串处理函数整理
Jan 29 Python
Python中AND、OR的一个使用小技巧
Feb 18 Python
python 内置函数filter
Jun 01 Python
一个月入门Python爬虫学习,轻松爬取大规模数据
Jan 03 Python
Python selenium实现微博自动登录的示例代码
May 16 Python
Python中的groupby分组功能的实例代码
Jul 11 Python
Python使用字典的嵌套功能详解
Feb 27 Python
详解Python匿名函数(lambda函数)
Apr 19 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 Python
Python文本处理简单易懂方法解析
Dec 19 Python
Python: tkinter窗口屏幕居中,设置窗口最大,最小尺寸实例
Mar 04 Python
Django admin组件的使用
Oct 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原理之错误抑制与内嵌HTML分析
2011/05/02 PHP
php创建和删除目录函数介绍和递归删除目录函数分享
2014/11/18 PHP
PHP Web表单生成器案例分析
2020/06/02 PHP
javascript html 静态页面传参数
2009/04/10 Javascript
jquery.validate使用攻略 第三部
2010/07/01 Javascript
jQuery.ajax 用户登录验证代码
2010/10/29 Javascript
Javascript生成json的函数代码(可以用php的json_decode解码)
2012/06/11 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
JavaScript函数的一些注意要点小结及js匿名函数
2015/11/10 Javascript
JavaScript随机打乱数组顺序之随机洗牌算法
2016/08/02 Javascript
12 款 JS 代码测试必备工具(翻译)
2016/12/13 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
python编写弹球游戏的实现代码
2018/03/12 Python
Python对List中的元素排序的方法
2018/04/01 Python
python实现校园网自动登录的示例讲解
2018/04/22 Python
解决python 无法加载downsample模型的问题
2018/10/25 Python
django商品分类及商品数据建模实例详解
2020/01/03 Python
Python Django搭建网站流程图解
2020/06/13 Python
世界上最大的在线学习和教学市场:Udemy
2017/11/08 全球购物
美国地毯购买网站:Rugs USA
2019/02/23 全球购物
Servlet如何得到客户端机器的信息
2014/10/17 面试题
医生自荐信
2013/10/11 职场文书
教师绩效考核方案
2014/01/21 职场文书
大学生通用个人的自我评价
2014/02/10 职场文书
绘画专业自荐信范文
2014/02/23 职场文书
群众路线教育党课主持词
2014/04/01 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
机关作风建设整改方案
2014/10/27 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
自我评价优缺点范文
2015/03/11 职场文书
保护校园环境倡议书
2015/04/28 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
php png失真的原因及解决办法
2021/10/24 PHP