本文实例讲述了Python学习笔记之熊猫索引列,过滤,分组,求和功能。分享给大家供大家参考,具体如下:
//www.jb51.net/article/162401.htm
前面我们已经把<强> 强>这种基金的历史净值明细表html内容抓取到了本地,现在我们还是需要解析html,取出相关的值,然后保存为csv文件以便<代码>熊猫> 代码来统计分析。
从bs4进口BeautifulSoup 进口操作系统 导入csv #使用BeautifulSoup解析html内容 def getFundDetailData (html): 汤=BeautifulSoup (html、“html.parser”) 行=soup.find(“表”).tbody.find_all (tr) 结果=[] 一行的行: tds=row.find_all (td) 结果。追加({“fcode”:“519961” “fdate”: tds [0] .get_text () “导航”:tds [1] .get_text () “ACCNAV”: tds [2] .get_text () “DGR”: tds [3] .get_text () “pstate”: tds [4] .get_text () “rstate”: tds [5] .get_text () } ) 返回结果 #把解析之后的数据写入到csv文件 def writeToCSV (): data_dir=" . ./html/细节” all_path=os.listdir (data_dir) all_result=[] all_path的路径: 如果os.path.isfile (os.path.join (data_dir、路径): 张开(os.path.join (data_dir路径),rb) f: 内容=f.read () .decode (“utf - 8”) f.close () all_result=all_result + getFundDetailData(内容) 张开(“. ./csv/519961. csv”、“w”,编码=皍tf - 8”,换行符=" ")f: 作家=csv.writer (f) 作家。writerow ([‘fcode’,‘fdate’,‘导航’,“ACCNAV”、“DGR”,“pstate”,“rstate”)) 在all_result r: 作家。writerow ([[“fcode”], r (“fdate”), r(“导航”),r (“ACCNAV”), r (“DGR”), r (“pstate”), r [“rstate”]]) f.close () >之前#执行 writeToCSV () >之前
utf - 8编码: 进口熊猫 if __name__==癬_main__”: #读取csv文件创建熊猫对象 pd=pandas.read_csv (”。/csv/519961。csv”, dtype={“fcode”: pandas.np。str_}, index_col=癴date”) #把fdate这列设置为索引列 #根据索引列倒序 print (pd.sort_index(提升=False)) >之前既然<代码> fdate> 代码列设置为了索引列,那么如果根据索引获取呢?
#读取csv文件创建熊猫对象 pd=pandas.read_csv (”。/csv/519961。csv”, dtype={“fcode”: pandas.np。str_}, index_col=癴date”) #把fdate这列设置为索引列 pd。指数=pandas.to_datetime (pd.index) 打印(pd(“2017-11-29”)) # 2017-11-29 519961 1.189 1.189 -1.00%限制大额申购开放赎回 >之前2,直接指定<代码> fdate> 代码列就是日期类型
#读取csv文件创建熊猫对象 pd=pandas.read_csv (”。/csv/519961。csv”, dtype={“fcode”: pandas.np。str_}, index_col=癴date parse_dates=[" fdate "]) #指明fdate是日期类型 打印(pd(“2017-11-29”)) # 2017-11-29 519961 1.189 1.189 -1.00%限制大额申购开放赎回 >之前打印索引:
打印(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,长度=603,频率=没有) >之前3,索引的高级用法
#取出2017年7月的全部数据 打印(pd(“2017 - 07年”)) #取出2017年7月到9月的数据 打印(pd(“2017 - 07年”:“2017 - 09年)) #到2015 - 07年的数据 打印(pd[:“2015 - 07年”) #取出截至到2015 - 07年的数据 #然后倒序 打印(pd [:“2015 - 7] .sort_index(提升=False)) >之前
结果=帕金森病(pd (“DGR”.notnull ()] # DGR一定要有值 #过滤掉DGR值里的%号,最后取出小于0的值(负数就表示增长率下跌了) 结果=结果(结果[' DGR的].str.strip (“%”) .astype (pandas.np.float) & lt; 0] #按照月份统计DGR跌的次数 结果=结果。groupby(λd: d.strftime (“% Y - % m”)) .size () #对DGR跌的次数倒序,然后取出前面第一个 结果=result.sort_values(升序=False) .head (1) 打印(结果)# 2016 - 04 12意思就是2016年4月份是该基金DGR下跌次数最多的月份Python学习笔记之熊猫索引列,过滤,分组,求和功能示例