雖然DataFrame上的applymap
函數按照元素方式操作,但transform
函數似乎達到了同樣的效果,除了聲明返回類似索引的DataFrame。轉換與applymap對於大熊貓有什麼區別DataFrame
問題:
- 是否有任何使用情況下,其中一人的作品和其他不?
- 一個比另一個有更好的表現嗎?
- 什麼是在文檔中聲明的類似索引的DataFrame?
雖然DataFrame上的applymap
函數按照元素方式操作,但transform
函數似乎達到了同樣的效果,除了聲明返回類似索引的DataFrame。轉換與applymap對於大熊貓有什麼區別DataFrame
問題:
不同的用例。比較它們時,最好帶上apply
和agg
。
設置
np.random.seed([3,1415])
df = pd.DataFrame(np.random.randint(10, size=(6, 4)), columns=list('ABCD'))
df
A B C D
0 0 2 7 3
1 8 7 0 6
2 8 6 0 2
3 0 4 9 7
4 3 2 4 3
5 3 6 7 7
pd.DataFrame.applymap
這需要一個函數,並返回與該函數的結果的新數據幀被施加到值在每個小區和更換的值結果的單元格。
df.applymap(lambda x: str(x) * x)
A B C D
0 22 7777777 333
1 88888888 7777777 666666
2 88888888 666666 22
3 4444 999999999 7777777
4 333 22 4444 333
5 333 666666 7777777 7777777
pd.DataFrame.agg
採用一個或多個功能。預計每個功能都是聚合功能。含義是每個函數應用於每個列,並且預期會返回替換整個列的單個值。示例將是'mean'
或'max'
。這兩種都需要一組數據並返回一個標量。
df.agg('mean')
A 3.666667
B 4.500000
C 4.500000
D 4.666667
dtype: float64
或者
df.agg(['mean', 'std', 'first', 'min'])
A B C D
mean 3.666667 4.500000 4.500000 4.666667
std 3.614784 2.167948 3.834058 2.250926
min 0.000000 2.000000 0.000000 2.000000
pd.DataFrame.transform
注意到,預計將被施加到柱上,並返回相同大小的列一個功能。
df.transform(lambda x: x/x.std())
A B C D
0 0.000000 0.922531 1.825742 1.332785
1 2.213133 3.228859 0.000000 2.665570
2 2.213133 2.767594 0.000000 0.888523
3 0.000000 1.845062 2.347382 3.109832
4 0.829925 0.922531 1.043281 1.332785
5 0.829925 2.767594 1.825742 3.109832
pd.DataFrame.apply
熊貓試圖找出如果apply
是減少它是在(又名,聚合)操作列的維數,或者如果將所述柱成等於另一列尺寸。當它算出來時,它將運行剩餘的操作,就像它是一個聚合或轉換過程一樣。
df.apply('mean')
A 3.666667
B 4.500000
C 4.500000
D 4.666667
dtype: float64
或者
df.apply(lambda x: (x - x.mean())/x.std())
A B C D
0 -1.014353 -1.153164 0.652051 -0.740436
1 1.198781 1.153164 -1.173691 0.592349
2 1.198781 0.691898 -1.173691 -1.184698
3 -1.014353 -0.230633 1.173691 1.036611
4 -0.184428 -1.153164 -0.130410 -0.740436
5 -0.184428 0.691898 0.652051 1.036611
我新的大熊貓,並試圖找到答案同樣的問題。我發現這個大熊貓網站(https://pandas.pydata.org/pandas-docs/stable/basics.html)
因爲不是所有的功能都可以矢量(接受與NumPy陣列和 返回另一個數組或值),該方法applymap()上的數據幀 和類似地圖()在Series上接受任何一個取值爲 且返回單個值的Python函數。
我認爲這意味着傳遞給變換的函數應該是向量化的,整個系列將作爲參數傳遞給這些函數。傳遞給map(和applymap)的函數不需要進行矢量化,並且每個元素都將傳遞給該函數,因爲map會迭代該系列。
謝謝,但你沒有回答我的問題 – darcyq
@darcyq applymap通常很慢。雖然它的最後幾個版本變得更好了。看看我的例子,並試圖找出你的其他問題的答案。 – piRSquared
欣賞你的答案@piRSquared。我之前在熊貓文檔中實際上讀過你的答案。我顯然可以閱讀源代碼,但在我花時間做這件事之前,我想看看有沒有人知道它的頭頂。 – darcyq