pyspark.pandas.DataFrame.apply¶
-
DataFrame。
應用
( 函數:可調用的,軸:聯盟(int,str]=0,arg遊戲:序列(任何]=(),* *kwds:任何 )→聯盟(係列,DataFrame,指數] ¶ -
應用一個函數DataFrame沿著一個軸。
對象傳遞給函數係列對象的索引是DataFrame的指數(
軸= 0
)或DataFrame的列(軸= 1
)。另請參閱轉換並應用一個函數。
請注意
當軸0或“指數”,是嗎函數無法訪問整個輸入係列。pandas-on-Spark內部將輸入係列分為多個批次和調用函數多次與每一批。因此,隨著全球聚合之類的操作都是不可能的。看下麵的例子。
> > >#這裏不返回一係列的長度,但是內部的批處理…#使用。…def長度(年代)- >int:…返回len(年代)…> > >df=ps。DataFrame({“一個”:範圍(1000年)})> > >df。應用(長度,軸=0)83年01 832 83年…8383年11dtype: int32
請注意
這個API函數執行一次來推斷的類型可能是非常昂貴的,例如,當聚合或排序後創建的數據集。
為了避免這種情況,指定返回類型係列或標量值
函數
例如,如下:> > >def廣場(年代)- >ps。係列(np。int32]:…返回年代* *2
pandas-on-Spark使用返回類型提示,不試圖推斷類型。
軸是1時,它需要指定DataFrame或標量值類型提示如下:
> > >defplus_one(x)- >ps。DataFrame(int,(浮動,浮動]:…返回x+1
如果指定返回類型DataFrame,輸出列名稱c0, c1, c2…cn。這些名稱映射到返回DataFrame按位置
函數
。指定列的名稱,您可以指定在熊貓友好風格如下:
> > >defplus_one(x)- >ps。DataFrame((“指數”,int),((“一個”,浮動),(“b”,浮動)]]:…返回x+1
> > >pdf=pd。DataFrame({“一個”:(1,2,3),“b”:(3,4,5]})> > >defplus_one(x)- >ps。DataFrame(…(pdf。指數。的名字,pdf。指數。dtype),郵政編碼(pdf。dtypes,pdf。列):…返回x+1
- 參數
-
- 函數 函數
-
函數適用於每一列或行。
- 軸 {0或“指數”,或“列”},默認為0
-
軸以及應用功能:
0或“指數”:函數應用到每一列。
1或“列”:函數應用到每一行。
- arg遊戲 元組
-
位置參數傳遞函數除了數組/係列。
- * * kwds
-
增加關鍵字參數通過關鍵字參數函數。
- 返回
-
- 係列或DataFrame
-
應用的結果
函數
DataFrame沿著給定的軸。
另請參閱
-
DataFrame.applymap
-
elementwise操作。
-
DataFrame.aggregate
-
隻有執行聚合類型操作。
-
DataFrame.transform
-
隻有執行類型轉換操作。
-
Series.apply
-
相當於函數級數。
例子
> > >df=ps。DataFrame([[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)- >np。int64:…返回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)- >ps。DataFrame((“指數”,int),((“一個”,np。int64),(“B”,np。int64)]]:…返回x…> > >df。應用(識別,軸=1)一個B指數0 4 91 4 92 4 9
您還可以指定額外的參數。
> > >defplus_two(一個,b,c)- >ps。DataFrame(np。int64,(np。int64,np。int64]:…返回一個+b+c…> > >df。應用(plus_two,軸=1,arg遊戲=(1),c=3)c0 c10 8 131 8 132 8 13