成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

實用的Pandas技巧,估計80%的人不知道

開發 后端
今天,Lemon也會分享下自定義函數有兩個參數的情況,該如何解決。接下來,還是先更新此前文章的代碼。

之前跟大家分享了在 pandas 的 apply 函數中用 pd.Series 功能來拆分文本,文章鏈接如下:

數據來源于 akshare,由于 akshare 版本的更新,部分接口發生變化,致使上面文章里的代碼運行會出錯。因此今天也會更新下代碼。

此外,在上面文章里應用到了 apply 使用自定義函數的功能,之前文章里,自定義函數只有一個參數。有同學提了一個問題,如果自定義函數有兩個參數,該怎么辦?

嗯嗯嗯,這是一個好問題!

今天,Lemon也會分享下自定義函數有兩個參數的情況,該如何解決。

接下來,還是先更新此前文章的代碼。

01 使用apply拆分文本

Pandas 中 apply 函數,應用廣泛,今天要跟大家分享一個使用的技巧,使用 apply 將 dataframe 中內容為 list 的列拆分為多列。

拆分前的數據情況,如下圖紅色標注所示:

拆分后,如下圖所示:

 

這個案例中,Lemon 使用的數據來自 akshare ,在開始前,引入相關 package : 

  1. # -*- coding: utf-8 -*-  
  2. """  
  3. @Author: Lemon  
  4. @出品:Python數據之道  
  5. @Homepage: liyangbit.com  
  6. """  
  7. import numpy as np  
  8. import pandas as pd  
  9. import akshare as ak 

Lemon 使用的幾個 Python 庫的版本信息如下: 

  1. print('numpy版本:{}'.format(np.__version__))  
  2. print('pandas版本:{}'.format(pd.__version__))  
  3. print('akshare版本:{}'.format(ak.__version__)) 
  4. # numpy版本:1.18.1  
  5. # pandas版本:1.0.3  
  6. # akshare版本:0.7.53 

如果代碼運行出現問題,請先檢查下這幾個Python庫的版本是否與上面的一致

先從 akshare 獲取需要的數據,分為兩步,第一步是獲取基金代碼的列表,如下: 

  1. df = ak.fund_em_fund_name().head(20).tail(5)  
  2. dfdf = df[['基金代碼','基金簡稱']]  
  3. print(df) 

第二步是獲取基金凈值數據和凈值日期,通過一個自定義函數來獲取,自定義函數如下: 

  1. # 自定義函數只有一個參數的情形  
  2. # 獲取基金單位凈值以及凈值日期  
  3. def get_mutual_fund(code):  
  4.     df = ak.fund_em_open_fund_info(fund=codeindicator="單位凈值走勢" 
  5.     dfdf = df[['凈值日期', '單位凈值','日增長率']]  
  6.     # df.columns = ['凈值日期', '單位凈值', 'equityReturn', 'unitMoney']  
  7.     df['凈值日期'] = pd.to_datetime(df['凈值日期'])  
  8.     dfdf = df.sort_values('凈值日期',ascending=False 
  9.     unit_equity = df.head(1)['單位凈值'].values[0]  
  10.     date_latest = df.head(1)['凈值日期'].values[0]  
  11.     return [unit_equity, date_latest] 

對于這個自定義函數,在 pandas 使用 apply 來應用自定義函數,這是使用 apply 的一種常用的方法,如下: 

  1. # 獲取基金最新的單位凈值和凈值日期  
  2. df['tmp'] = df['基金代碼'].apply(get_mutual_fund)  
  3. print(df) 

獲取的數據截圖如下:

文本拆分

上圖中的 tmp 列,就是我們這次需要進行處理的對象。

處理方法可以有多種,這里 Lemon 使用 pandas 中的 apply 來處理,相對來說,也是比較便捷的方式。

在 apply 函數中,使用 pd.Series 就可以達到我們的目的。 

  1. # 將單位凈值和凈值日期單獨成列  
  2. df[['最新單位凈值','凈值日期']] = df['tmp'].apply(pd.Series)  
  3. dfdf = df.drop('tmp',axis=1 
  4. print(df) 

結果如下:

02 有兩個參數的函數

pandas 中的 apply 函數應用自定義函數時,通常情況下,都是沒有參數或者一個參數,那么如果有兩個參數,是否還可以使用apply函數呢?

答案是可以的。

這里我們也來探討下。

還是以上面的案例為基礎雛形,同樣的,先從 akshare 獲取數據 

  1. df1 = ak.fund_em_fund_name().head(20).tail(5)  
  2. df1df1 = df1[['基金代碼','基金簡稱']] 

接下來,自定義一個帶有兩個參數的函數,如下: 

  1. # 自定義函數有兩個參數的情形  
  2. # 獲取年度年底基金凈值數據  
  3. def get_mutual_fund_year(code,year):  
  4.     year = str(year)  
  5.     df = ak.fund_em_open_fund_info(fund=codeindicator="單位凈值走勢" 
  6.     dfdf = df[['凈值日期', '單位凈值', '日增長率']]  
  7.     # df.columns = ['凈值日期', '單位凈值', 'equityReturn', 'unitMoney']  
  8.     df['凈值日期'] = pd.to_datetime(df['凈值日期']) 
  9.     dfdf = df.sort_values('凈值日期',ascending=False 
  10.     dfdf = df.set_index('凈值日期')[year] 
  11.     dfdf = df.reset_index()  
  12.     unit_equity = df.head(1)['單位凈值'].values[0]  
  13.     date = df.head(1)['凈值日期'].values[0]  
  14.     return [unit_equity,date] 

帶有兩個參數的自定義函數

然后,使用 apply 來應用上面這個帶兩個參數的自定義函數,核心要點就是嵌套使用 lambda 函數,固定其中一個參數,具體如下 

  1. df1['tmp'] = df1['基金代碼'].apply(lambda code: get_mutual_fund_year(code, 2019)) 

后續,依舊是文本拆分,實現代碼如下: 

  1. # 將單位凈值和凈值日期單獨成列  
  2. df1[['最新單位凈值','凈值日期']] = df1['tmp'].apply(pd.Series)  
  3. df1df1 = df1.drop('tmp',axis=1 
  4. print(df1) 

應用場景

有同學可能會問,使用兩個參數的自定義函數,有什么用呢?

這里,Lemon 也分享一個應用場景:

根據上面的基礎雛形數據,針對具體的年度,建立一個下拉列表,選擇不同的年份時,返回不同年份的結果,包括文本數據、表格數據以及圖表等。

效果如下:

涉及到一些個人的數據,就沒有完整展示啦~~

其他的應用場景,歡迎大家來分享! 

 

責任編輯:龐桂玉 來源: 戀習Python
相關推薦

2025-04-16 07:06:43

2022-06-23 13:13:36

GitHub開發技巧

2021-08-24 00:13:23

Windows 10Windows微軟

2022-09-20 11:58:27

NpmNode.js

2021-09-24 14:20:25

開發技能工具

2023-10-11 08:16:42

客戶端服務器內容

2023-01-13 16:48:48

前端開發JavaScript

2021-12-14 10:55:14

Python元素數據

2020-07-11 09:45:33

Python編程語言開發

2025-02-04 17:33:00

2020-08-11 11:20:49

Linux命令使用技巧

2021-11-02 19:14:58

Spring數據

2022-12-07 08:16:50

Vue 3技巧數組

2021-01-15 05:39:13

HashMapHashTableTreeMap

2015-08-13 09:03:14

調試技巧

2020-01-29 19:40:36

Python美好,一直在身邊Line

2021-01-05 11:22:58

Python字符串代碼

2017-03-02 14:05:42

AndroidAndroid Stu調試技巧

2023-12-21 14:40:09

Python編程語言

2020-11-12 10:16:32

企業信息化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 成人亚洲在线 | 午夜寂寞福利视频 | 成人二区| 久久精品亚洲精品国产欧美 | 日韩精品一区二区三区老鸭窝 | 91国内精品久久 | 欧美激情视频一区二区三区在线播放 | 日韩色综合 | 久久av网站 | 永久av| 国产精品日日做人人爱 | 国产精品成av人在线视午夜片 | 成人在线一区二区三区 | 九九热国产精品视频 | 天天精品综合 | 91精品国产91久久久久久密臀 | 免费黄色网址视频 | 精品国产精品三级精品av网址 | 在线日韩欧美 | 视频在线观看亚洲 | 黄视频免费在线 | av一二三区 | 成人做爰9片免费看网站 | 国产精品久久国产精品 | 久久久久无码国产精品一区 | 99久久精品国产毛片 | 亚洲欧美中文日韩在线v日本 | 欧美日韩专区 | 日韩在线观看视频一区 | 欧美一级在线视频 | 97超碰在线播放 | 美女视频黄色的 | 欧美在线亚洲 | 午夜影晥 | 亚洲成人免费视频 | 亚洲三区在线观看 | 国产精品久久一区二区三区 | 999久久久| 一级黄色录像片子 | 亚洲欧洲日韩精品 中文字幕 | 久久精品视频免费看 |