Python?pandas中apply函數(shù)簡介以及用法詳解
1.基本信息
? Pandas 的 apply() 方法是用來調(diào)用一個函數(shù)(Python method),讓此函數(shù)對數(shù)據(jù)對象進行批量處理。Pandas 的很多對象都可以使用 apply() 來調(diào)用函數(shù),如 Dataframe、Series、分組對象、各種時間序列等。
2.語法結(jié)構(gòu)
? apply() 使用時,通常放入一個 lambda 函數(shù)表達式、或一個函數(shù)作為操作運算,官方上給出DataFrame的 apply() 用法:
DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwargs)
參數(shù):
- func:函數(shù)或 lambda 表達式,應(yīng)用于每行或者每列
- axis:{0 or ‘index’, 1 or ‘columns’}, 默認為0
- 0 or ‘index’: 表示函數(shù)處理的是每一列
- 1 or ‘columns’: 表示函數(shù)處理的是每一行
- raw:bool 類型,默認為 False;
- False ,表示把每一行或列作為 Series 傳入函數(shù)中;
- True,表示接受的是 ndarray 數(shù)據(jù)類型;
- result_type:{‘expand’, ‘reduce’, ‘broadcast’, None}, default None
These only act when axis=1 (columns):
- ‘expand’ : 列表式的結(jié)果將被轉(zhuǎn)化為列。
- ‘reduce’ : 如果可能的話,返回一個 Series,而不是展開類似列表的結(jié)果。這與 expand 相反。
- ‘broadcast’ : 結(jié)果將被廣播到 DataFrame 的原始形狀,原始索引和列將被保留。
- args: func 的位置參數(shù)
- **kwargs:要作為關(guān)鍵字參數(shù)傳遞給 func 的其他關(guān)鍵字參數(shù),1.3.0 開始支持
返回值:
- Series 或者 DataFrame:沿數(shù)據(jù)的給定軸應(yīng)用 func 的結(jié)果
Objects passed to the function are Series objects whose index is either the DataFrame's index (``axis=0``) or the DataFrame's columns(``axis=1``). 傳遞給函數(shù)的對象是Series對象,其索引是DataFrame的索引(axis=0)或DataFrame的列(axis=1)。 By default (``result_type=None``), the final return type is inferred from the return type of the applied function. Otherwise,it depends on the `result_type` argument. 默認情況下( result_type=None),最終的返回類型是從應(yīng)用函數(shù)的返回類型推斷出來的。否則,它取決于' result_type '參數(shù)。
注:DataFrame與Series的區(qū)別與聯(lián)系:
區(qū)別:
- series,只是一個一維結(jié)構(gòu),它由index和value組成。
- dataframe,是一個二維結(jié)構(gòu),除了擁有index和value之外,還擁有column。
聯(lián)系:
- dataframe由多個series組成,無論是行還是列,單獨拆分出來都是一個series。
3.使用案例
3.1 DataFrame使用apply
官方使用案例
import pandas as pd
import numpy as np
df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
df
A B
0 4 9
1 4 9
2 4 9
# 使用numpy通用函數(shù) (如 np.sqrt(df)),
df.apply(np.sqrt)
'''
A B
0 2.0 3.0
1 2.0 3.0
2 2.0 3.0
'''
# 使用聚合功能
df.apply(np.sum, axis=0)
'''
A 12
B 27
dtype: int64
'''
df.apply(np.sum, axis=1)
'''
0 13
1 13
2 13
dtype: int64
'''
# 在每行上返回類似列表的內(nèi)容
df.apply(lambda x: [1, 2], axis=1)
'''
0 [1, 2]
1 [1, 2]
2 [1, 2]
dtype: object
'''
# result_type='expand' 將類似列表的結(jié)果擴展到數(shù)據(jù)的列
df.apply(lambda x: [1, 2], axis=1, result_type='expand')
'''
0 1
0 1 2
1 1 2
2 1 2
'''
# 在函數(shù)中返回一個序列,生成的列名將是序列索引。
df.apply(lambda x: pd.Series([1, 2], index=['foo', 'bar']), axis=1)
'''
foo bar
0 1 2
1 1 2
2 1 2
'''
# result_type='broadcast' 將確保函數(shù)返回相同的形狀結(jié)果
# 無論是 list-like 還是 scalar,并沿軸進行廣播
# 生成的列名將是原始列名。
df.apply(lambda x: [1, 2], axis=1, result_type='broadcast')
'''
A B
0 1 2
1 1 2
2 1 2
'''
其他案例:
import numpy as np
import pandas as pd
df = pd.DataFrame({'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]},
index=['a', 'b', 'c'])
df
A B C
a 1 4 7
b 2 5 8
c 3 6 9
# 對各列應(yīng)用函數(shù) axis=0
df.apply(lambda x: np.sum(x))
A 6
B 15
C 24
dtype: int64
# 對各行應(yīng)用函數(shù)
df.apply(lambda x: np.sum(x), axis=1)
a 12
b 15
c 18
dtype: int64
3.2 Series使用apply
官網(wǎng)案例
s = pd.Series([20, 21, 12],index=['London', 'New York', 'Helsinki'])
s
'''
London 20
New York 21
Helsinki 12
dtype: int64
'''
# 定義函數(shù)并將其作為參數(shù)傳遞給 apply,求值平方化。
def square(x):
return x ** 2
s.apply(square)
'''
London 400
New York 441
Helsinki 144
dtype: int64
'''
# 通過將匿名函數(shù)作為參數(shù)傳遞給 apply
s.apply(lambda x: x ** 2)
'''
London 400
New York 441
Helsinki 144
dtype: int64
'''
# 定義一個需要附加位置參數(shù)的自定義函數(shù)
# 并使用args關(guān)鍵字傳遞這些附加參數(shù)。
def subtract_custom_value(x, custom_value):
return x - custom_value
s.apply(subtract_custom_value, args=(5,))
'''
London 15
New York 16
Helsinki 7
dtype: int64
'''
# 定義一個接受關(guān)鍵字參數(shù)并將這些參數(shù)傳遞
# 給 apply 的自定義函數(shù)。
def add_custom_values(x, **kwargs):
for month in kwargs:
x += kwargs[month]
return x
s.apply(add_custom_values, june=30, july=20, august=25)
'''
London 95
New York 96
Helsinki 87
dtype: int64
'''
# 使用Numpy庫中的函數(shù)
s.apply(np.log)
'''
London 2.995732
New York 3.044522
Helsinki 2.484907
dtype: float64
'''3.3 其他案例
import pandas as pd
# 顯示所有列
pd.set_option('display.max_columns', None)
# 顯示所有行
pd.set_option('display.max_rows', None)
# 設(shè)置value的顯示長度為100,默認為50
pd.set_option('max_colwidth', 100)
# 用來計算日期差的包
import datetime
def dataInterval(data1, data2):
"""
Args:
:param data1: datetime
:param data2: datetime
:return: delta days
"""
d1 = datetime.datetime.strptime(data1, '%Y-%m-%d')
d2 = datetime.datetime.strptime(data2, '%Y-%m-%d')
delta = d1 - d2
return delta.days
def getInterval(arrLike):
"""
Args:
:param arrLike: DataFrame
:return: delta days
"""
PublishedTime = arrLike['PublishedTime']
ReceivedTime = arrLike['ReceivedTime']
days = dataInterval(PublishedTime.strip(), ReceivedTime.strip())
return days
def getInterval_new(arrLike, before, after):
"""
Args:
:param arrLike: DataFrame
:param before: forward time
:param after: backwar time
:return: delta days
"""
before = arrLike[before]
after = arrLike[after]
days = dataInterval(after.strip(), before.strip())
return daysif __name__ == '__main__':
df = pd.read_excel('./data/NS_info.xls')
print(df.head())
# method 1
df['TimeInterval'] = df.apply(getInterval, axis=1)
print(df.head())
# method 2
df['TimeInterval'] = df.apply(getInterval_new,axis=1,
args=('ReceivedTime', 'PublishedTime'))
# method 3
df['TimeInterval'] = df.apply(getInterval_new,axis=1,
**{'before': 'ReceivedTime', 'after': 'PublishedTime'})
# method 4
df['TimeInterval'] = df.apply(getInterval_new,axis=1, before='ReceivedTime', after='PublishedTime')

4.總結(jié)
1.apply方法都是通過傳入一個函數(shù)或者lambda表達式對數(shù)據(jù)進行批量處理
2.apply方法處理的都是一個Series對象
參考鏈接:
1.https://blog.csdn.net/missyougoon/article/details/83301712
2.https://blog.csdn.net/qq_19528953/article/details/79348929
到此這篇關(guān)于Python pandas中apply函數(shù)簡介以及用法詳解的文章就介紹到這了,更多相關(guān)pandas apply函數(shù)用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 對pandas中apply函數(shù)的用法詳解
- pandas apply 函數(shù) 實現(xiàn)多進程的示例講解
- 詳談pandas中agg函數(shù)和apply函數(shù)的區(qū)別
- 解析pandas apply() 函數(shù)用法(推薦)
- Pandas groupby apply agg 的區(qū)別 運行自定義函數(shù)說明
- pandas使用函數(shù)批量處理數(shù)據(jù)(map、apply、applymap)
- Pandas的Apply函數(shù)具體使用
- Pandas對每個分組應(yīng)用apply函數(shù)的實現(xiàn)
- Pandas中Apply函數(shù)加速百倍的技巧分享
相關(guān)文章
python實現(xiàn)的讀取網(wǎng)頁并分詞功能示例
這篇文章主要介紹了python實現(xiàn)的讀取網(wǎng)頁并分詞功能,結(jié)合實例形式分析了Python使用requests模塊讀取網(wǎng)頁,以及jieba庫分詞的相關(guān)操作技巧,需要的朋友可以參考下2019-10-10
利用Python自制網(wǎng)頁并實現(xiàn)一鍵自動生成探索性數(shù)據(jù)分析報告
這篇文章主要介紹了利用Python自制了網(wǎng)頁并實現(xiàn)一鍵自動生成探索性數(shù)據(jù)分析報告,文章內(nèi)容具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05
Python利用代理ip實現(xiàn)自動化爬蟲任務(wù)管理
本文主要介紹了Python利用代理ip實現(xiàn)自動化爬蟲任務(wù)管理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06
Python?matplotlib實戰(zhàn)之雷達圖繪制
雷達圖(Radar?Chart),也被稱為蛛網(wǎng)圖或星型圖,是一種用于可視化多個變量之間關(guān)系的圖表形式,本文主要為大家介紹了如何使用Matplotlib繪制雷達圖,需要的小伙伴可以參考下2023-08-08

