pyspark.pandas.DataFrame.apply

DataFrame。 應用 ( 函數:可調用的,:聯盟(int,str]=0,arg遊戲:序列(任何]=(),* *kwds:任何 )→聯盟(係列,DataFrame,指數]

應用一個函數DataFrame沿著一個軸。

對象傳遞給函數係列對象的索引是DataFrame的指數(軸= 0)或DataFrame的列(軸= 1)。

另請參閱轉換並應用一個函數

請注意

0或“指數”,是嗎函數無法訪問整個輸入係列。pandas-on-Spark內部將輸入係列分為多個批次和調用函數多次與每一批。因此,隨著全球聚合之類的操作都是不可能的。看下麵的例子。

> > >#這裏不返回一係列的長度,但是內部的批處理#使用。def長度(年代)- >int:返回len(年代)> > >df=psDataFrame({“一個”:範圍(1000年)})> > >df應用(長度,=0)83年01 832 83年8383年11dtype: int32

請注意

這個API函數執行一次來推斷的類型可能是非常昂貴的,例如,當聚合或排序後創建的數據集。

為了避免這種情況,指定返回類型係列或標量值函數例如,如下:

> > >def廣場(年代)- >ps係列(npint32]:返回年代* *2

pandas-on-Spark使用返回類型提示,不試圖推斷類型。

軸是1時,它需要指定DataFrame或標量值類型提示如下:

> > >defplus_one(x)- >psDataFrame(int,(浮動,浮動]:返回x+1

如果指定返回類型DataFrame,輸出列名稱c0, c1, c2…cn。這些名稱映射到返回DataFrame按位置函數

指定列的名稱,您可以指定在熊貓友好風格如下:

> > >defplus_one(x)- >psDataFrame((“指數”,int),((“一個”,浮動),(“b”,浮動)]]:返回x+1
> > >pdf=pdDataFrame({“一個”:(1,2,3),“b”:(3,4,5]})> > >defplus_one(x)- >psDataFrame((pdf指數的名字,pdf指數dtype),郵政編碼(pdfdtypes,pdf):返回x+1
參數
函數 函數

函數適用於每一列或行。

{0或“指數”,或“列”},默認為0

軸以及應用功能:

  • 0或“指數”:函數應用到每一列。

  • 1或“列”:函數應用到每一行。

arg遊戲 元組

位置參數傳遞函數除了數組/係列。

* * kwds

增加關鍵字參數通過關鍵字參數函數

返回
係列或DataFrame

應用的結果函數DataFrame沿著給定的軸。

另請參閱

DataFrame.applymap

elementwise操作。

DataFrame.aggregate

隻有執行聚合類型操作。

DataFrame.transform

隻有執行類型轉換操作。

Series.apply

相當於函數級數。

例子

> > >df=psDataFrame([[4,9]]*3,=(“一個”,“B”])> > >df一個B0 4 91 4 92 4 9

使用numpy通用函數(在本例中是一樣的np.sqrt (df)):

> > >def√6(x)- >ps係列(浮動]:返回np√6(x)> > >df應用(√6,=0)一個B0 2.0 3.01)2.0 - 3.02 2.0 - 3.0

你可以省略類型提示,讓pandas-on-Spark推斷它的類型。

> > >df應用(np√6,=0)一個B0 2.0 3.01)2.0 - 3.02 2.0 - 3.0

是1或“列”,它適用於函數為每一行。

> > >def求和(x)- >npint64:返回np總和(x)> > >df應用(求和,=1)0 131)132 13dtype: int64

同樣,你可以省略類型提示,讓pandas-on-Spark推斷它的類型。

> > >df應用(np總和,=1)0 131)132 13dtype: int64
> > >df應用(馬克斯,=1)0 91 92 9dtype: int64

返回一個類似將導致一係列

> > >df應用(λx:(1,2),=1)0 (1、2)1 [1,2]2 (1、2)dtype:對象

為了指定類型時' 1 ',它應該使用DataFrame[…]注釋。在這種情況下,列名是自動生成的。

> > >def識別(x)- >psDataFrame((“指數”,int),((“一個”,npint64),(“B”,npint64)]]:返回x> > >df應用(識別,=1)一個B指數0 4 91 4 92 4 9

您還可以指定額外的參數。

> > >defplus_two(一個,b,c)- >psDataFrame(npint64,(npint64,npint64]:返回一個+b+c> > >df應用(plus_two,=1,arg遊戲=(1),c=3)c0 c10 8 131 8 132 8 13