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解释器理解Python中的字节码
Apr 01 Python
python实现的简单抽奖系统实例
May 22 Python
Python实现简单的多任务mysql转xml的方法
Feb 08 Python
python 文本单词提取和词频统计的实例
Dec 22 Python
Pandas库之DataFrame使用的学习笔记
Jun 21 Python
python爬虫实现中英翻译词典
Jun 25 Python
python双端队列原理、实现与使用方法分析
Nov 27 Python
Python Gluon参数和模块命名操作教程
Dec 18 Python
python脚本后台执行方式
Dec 21 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
自己搭建resnet18网络并加载torchvision自带权重的操作
May 13 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 字符串分割和比较
2009/10/06 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
PHP单元测试配置与使用方法详解
2019/12/27 PHP
PHP哈希表实现算法原理解析
2020/12/11 PHP
List Installed Software Features
2007/06/11 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
require.js的用法详解
2015/10/20 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
浅谈jQuery添加的HTML,JS失效的问题
2016/10/05 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
Angular5.1新功能分享
2017/12/21 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
Python设计模式之代理模式实例
2014/04/26 Python
Python原始字符串(raw strings)用法实例
2014/10/13 Python
Python的Django框架中的select_related函数对QuerySet 查询的优化
2015/04/01 Python
Python连接数据库学习之DB-API详解
2017/02/07 Python
python pandas库的安装和创建
2019/01/10 Python
Django使用uwsgi部署时的配置以及django日志文件的处理方法
2019/08/30 Python
TensorFlow实现保存训练模型为pd文件并恢复
2020/02/06 Python
matplotlib基础绘图命令之imshow的使用
2020/08/13 Python
CSS3绘制六边形的简单实现
2016/08/25 HTML / CSS
微信html5页面调用第三方位置导航的示例
2018/03/14 HTML / CSS
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
大学毕业感言一句话
2014/02/06 职场文书
品质口号大全
2014/06/17 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
小学生差生评语
2014/12/29 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
2015年七一建党节活动方案
2015/05/05 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python