日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python分组求和_Python学习笔记之pandas索引列、过滤、分组、求和功能示例

發布時間:2024/10/14 python 80 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python分组求和_Python学习笔记之pandas索引列、过滤、分组、求和功能示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本文實例講述了Python學習筆記之pandas索引列、過濾、分組、求和功能。分享給大家供大家參考,具體如下:

前面我們已經把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学习笔记之pandas索引列、过滤、分组、求和功能示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。