mam*_*oku 4 python numpy dataframe python-3.x pandas
我了解如何计算正数和负数的立方根。但是,当尝试使用apply-lambda方法有效处理数据帧的所有元素时,我遇到了歧义问题。有趣的是,这个错误不会因相等而出现,所以我想知道代码可能有什么问题:
sample[columns]=sample[columns].apply(lambda x: (-1)*np.power(-x,1./3) if x<0 else np.power(x,1./3))
Run Code Online (Sandbox Code Playgroud)
看起来您正在传递列名称的列表或数组。我认为这是因为你的变量名是复数,s末尾有一个。如果是这种情况,那么sample[columns]就是一个数据帧。这是一个问题,因为apply迭代每一列,传递lambda您传递给的该列apply该列。所以你得到
(-1) * np.power(-series_object, -1./3) if series_object < 0 else...\nRun Code Online (Sandbox Code Playgroud)\n\n这就是series_object < 0把事情搞砸的原因,因为你要求整个系列的真实性小于零。
applymap
f = lambda x: -np.power(-x, 1./3) if x < 0 else np.power(x, 1./3)\nsample[columns] = sample[columns].applymap(f)\nRun Code Online (Sandbox Code Playgroud)\n\n也就是说,我会使用lambda如下定义
f = lambda x: np.sign(x) * np.power(abs(x), 1./3)\nRun Code Online (Sandbox Code Playgroud)\n\n然后你可以在整个数据帧上执行此操作
\n\nnp.random.seed([3,1415])\ndf = pd.DataFrame(np.random.randint(-10, 10, (5, 5)))\n\ndf\n\n 0 1 2 3 4\n0 6 1 -8 0 5\n1 3 1 3 9 -2\n2 -10 2 -10 -8 -10\n3 -3 9 3 8 2\n4 -6 -7 9 3 -3\nRun Code Online (Sandbox Code Playgroud)\n\nf = lambda x: np.sign(x) * np.power(abs(x), 1./3)\nf(df)\n\n 0 1 2 3 4\n0 1.817121 1.000000 -2.000000 0.000000 1.709976\n1 1.442250 1.000000 1.442250 2.080084 -1.259921\n2 -2.154435 1.259921 -2.154435 -2.000000 -2.154435\n3 -1.442250 2.080084 1.442250 2.000000 1.259921\n4 -1.817121 -1.912931 2.080084 1.442250 -1.442250\nRun Code Online (Sandbox Code Playgroud)\n\n与...一样
\n\ndf.applymap(f)\n\n 0 1 2 3 4\n0 1.817121 1.000000 -2.000000 0.000000 1.709976\n1 1.442250 1.000000 1.442250 2.080084 -1.259921\n2 -2.154435 1.259921 -2.154435 -2.000000 -2.154435\n3 -1.442250 2.080084 1.442250 2.000000 1.259921\n4 -1.817121 -1.912931 2.080084 1.442250 -1.442250\nRun Code Online (Sandbox Code Playgroud)\n\n检查是否相等
\n\ndf.applymap(f).equals(f(df))\n\nTrue\nRun Code Online (Sandbox Code Playgroud)\n\n而且速度更快
\n\n%timeit df.applymap(f)\n%timeit f(df)\n\n1000 loops, best of 3: 1.11 ms per loop\n1000 loops, best of 3: 473 \xc2\xb5s per loop\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4930 次 |
| 最近记录: |