- 1.
df['column1']=myFunction(df['column1'])
這裏你定義一個函數要在pd.Series
應用。你讓大熊貓處理這種情況將會發生。
- 2.
df['column1']=df['column1'].apply(lambda x:myFunction[x])
這裏你每個元素應用功能。
通常情況下,選項1將比選項2更快。它很大程度上取決於您的實際myFunction
,如果這是矢量化的還是逐個元素。
案例:
讓我們創建2列100,000行(足夠大的升值速度上的差異)一個數據幀和正方形中column1
元素:
In [1]:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(100000,2),
columns=['column1','column2'])
def myFunction(s):
return s**2
In [2]: %%timeit
...: myFunction(df.column1)
...:
1000 loops, best of 3: 1.68 ms per loop
In [3]: %%timeit
...: df.column1.apply(lambda x: x**2)
...:
10 loops, best of 3: 55.4 ms per loop
所以在這裏,您看到它在pd.Series
上執行操作的速度比按元素快30倍以上。這是因爲myFunction
是矢量化的。
現在,讓我們在您的myFunction
沒有矢量一個例子,但逐個元素:
In [4]: def myFunction(s):
...: return s.apply(lambda x: x**2)
...:
In [4]: %%timeit
...: myFunction(df.column1)
...:
10 loops, best of 3: 53.9 ms per loop
基本上它一樣做一個直接apply