自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

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

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

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

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

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

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

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

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

01 使用apply拆分文本

Pandas 中 apply 函數(shù),應(yīng)用廣泛,今天要跟大家分享一個使用的技巧,使用 apply 將 dataframe 中內(nèi)容為 list 的列拆分為多列。

拆分前的數(shù)據(jù)情況,如下圖紅色標注所示:

拆分后,如下圖所示:

 

這個案例中,Lemon 使用的數(shù)據(jù)來自 akshare ,在開始前,引入相關(guān) package : 

  1. # -*- coding: utf-8 -*-  
  2. """  
  3. @Author: Lemon  
  4. @出品:Python數(shù)據(jù)之道  
  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 

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

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

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

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

  1. # 自定義函數(shù)只有一個參數(shù)的情形  
  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] 

對于這個自定義函數(shù),在 pandas 使用 apply 來應(yīng)用自定義函數(shù),這是使用 apply 的一種常用的方法,如下: 

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

獲取的數(shù)據(jù)截圖如下:

文本拆分

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

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

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

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

結(jié)果如下:

02 有兩個參數(shù)的函數(shù)

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

答案是可以的。

這里我們也來探討下。

還是以上面的案例為基礎(chǔ)雛形,同樣的,先從 akshare 獲取數(shù)據(jù) 

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

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

  1. # 自定義函數(shù)有兩個參數(shù)的情形  
  2. # 獲取年度年底基金凈值數(shù)據(jù)  
  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] 

帶有兩個參數(shù)的自定義函數(shù)

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

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

后續(xù),依舊是文本拆分,實現(xiàn)代碼如下: 

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

應(yīng)用場景

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

這里,Lemon 也分享一個應(yīng)用場景:

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

效果如下:

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

其他的應(yīng)用場景,歡迎大家來分享! 

 

責任編輯:龐桂玉 來源: 戀習Python
相關(guān)推薦

2025-04-16 07:06:43

2022-06-23 13:13:36

GitHub開發(fā)技巧

2021-08-24 00:13:23

Windows 10Windows微軟

2023-10-11 08:16:42

客戶端服務(wù)器內(nèi)容

2021-09-24 14:20:25

開發(fā)技能工具

2022-09-20 11:58:27

NpmNode.js

2023-01-13 16:48:48

前端開發(fā)JavaScript

2021-12-14 10:55:14

Python元素數(shù)據(jù)

2020-07-11 09:45:33

Python編程語言開發(fā)

2025-02-04 17:33:00

2021-11-02 19:14:58

Spring數(shù)據(jù)

2020-08-11 11:20:49

Linux命令使用技巧

2020-11-12 10:16:32

企業(yè)信息化

2020-06-29 08:28:36

v-for 解構(gòu)函數(shù)

2017-03-02 14:05:42

AndroidAndroid Stu調(diào)試技巧

2023-12-21 14:40:09

Python編程語言

2015-08-13 09:03:14

調(diào)試技巧

2020-01-29 19:40:36

Python美好,一直在身邊Line

2021-01-05 11:22:58

Python字符串代碼

2022-12-07 08:16:50

Vue 3技巧數(shù)組
點贊
收藏

51CTO技術(shù)棧公眾號