Python 使用.apply或传递数据帧列之间有什么区别
我希望对数据帧中的列应用一个简单的函数。我用了两种不同的方式:Python 使用.apply或传递数据帧列之间有什么区别,python,pandas,Python,Pandas,我希望对数据帧中的列应用一个简单的函数。我用了两种不同的方式: 1.df['column1']=myFunction(df['column1']) 2.df['column1']=df['column1'].apply(lambda x:myFunction[x]) 我的数据集并没有那么大,无法分辨出差异,但我猜这与速度有关 有人能解释一下区别是什么,哪一个是首选的吗? 1.df['column1']=myFunction(df['column1']) 这里您定义了一个应用于pd.Seri
- 1.
df['column1']=myFunction(df['column1'])
- 2.
df['column1']=df['column1'].apply(lambda x:myFunction[x])
- 1.
df['column1']=myFunction(df['column1'])
pd.Series
的函数。你让熊猫来处理这件事
- 2.
df['column1']=df['column1'].apply(lambda x:myFunction[x])
myFunction
是矢量化的还是逐元素的
案例示例: 让我们创建一个包含2列和100000行的数据帧(足够大,可以看出速度上的差异),并将
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