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中的zip函数使用示例
Jan 29 Python
Python压缩和解压缩zip文件
Feb 14 Python
深入讲解Python中面向对象编程的相关知识
May 25 Python
Python中asyncore异步模块的用法及实现httpclient的实例
Jun 28 Python
python将每个单词按空格分开并保存到文件中
Mar 19 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
May 16 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
详解flask入门模板引擎
Jul 18 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
详解Python 正则表达式模块
Nov 05 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 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设计模式之装饰者模式
2012/02/29 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
PHP简单日历实现方法
2016/07/20 PHP
浅析PHP7的多进程及实例源码
2019/04/14 PHP
jQuery参数列表集合
2011/04/06 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
jquery地址栏链接与a标签链接匹配之特效代码总结
2015/08/24 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
JS使用队列对数组排列,基数排序算法示例
2019/03/02 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
koa+mongoose实现简单增删改查接口的示例代码
2019/05/13 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
js实现拖拽元素选择和删除
2020/08/25 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
python实现socket客户端和服务端简单示例
2014/02/24 Python
Python实现识别手写数字大纲
2018/01/29 Python
python+pandas+时间、日期以及时间序列处理方法
2018/07/10 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
Python 编程速成(推荐)
2019/04/15 Python
python启动应用程序和终止应用程序的方法
2019/06/28 Python
python计算无向图节点度的实例代码
2019/11/22 Python
Python中操作各种多媒体,视频、音频到图片的代码详解
2020/06/04 Python
python根据字典的键来删除元素的方法
2020/08/16 Python
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
自主招生自荐信
2013/12/08 职场文书
大学生自我鉴定
2013/12/16 职场文书
护士自我介绍信
2014/01/13 职场文书
小学安全教育材料
2014/02/17 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
职业规划实施方案
2014/06/10 职场文书
先进单位申报材料
2014/12/25 职场文书
2015大学迎新标语
2015/07/16 职场文书
2016入党心得体会范文
2016/01/06 职场文书
SQL语句中JOIN的用法场景分析
2021/07/25 SQL Server