环境:
Python 3.6.4
pandas 0.23.4
以下是我的代码。
from math import sqrt
import pandas as pd
df = pd.DataFrame({'x':[1,2,3], 'y':[4,5,6]})
df = df.assign(d = lambda z: sqrt(z.x**2 + z.y**2))
底线会引发如下类型错误。
...
TypeError: cannot convert the series to <class 'float'>
没有使用sqrt函数,它可以正常工作。
df = df.assign(d2 = lambda z: z.x**2 + z.y**2)
df
Out[6]:
x y d2
0 1 4 17
1 2 5 29
2 3 6 45
同时,apply 也是有效的。
df['d3'] = df.apply(lambda z: sqrt(z.x**2 + z.y**2), axis=1)
df
Out[8]:
x y d2 d3
0 1 4 17 4.123106
1 2 5 29 5.385165
2 3 6 45 6.708204
第一个有什么问题?