に見えます名前。変数名が複数のため、末尾にs
があるため、これを仮定します。この場合、sample[columns]
はデータフレームです。これは問題です。apply
が各列を反復し、その列をlambda
に渡してapply
に渡したためです。だから、
(-1) * np.power(-series_object, -1./3) if series_object < 0 else...
を取得し、それはあなたがゼロより小さいというシリーズ全体のtruthinessを求めているので、物事をめちゃくちゃにされてseries_object < 0
です。
f = lambda x: -np.power(-x, 1./3) if x < 0 else np.power(x, 1./3)
sample[columns] = sample[columns].applymap(f)
applymap
は
f = lambda x: np.sign(x) * np.power(abs(x), 1./3)
を次のように私は、あなたが全体のデータフレーム上でこれを実行する可能性が定義されてlambda
を使用したい、と述べたこと
平等
df.applymap(f).equals(f(df))
True
とそのfasteため
df.applymap(f)
0 1 2 3 4
0 1.817121 1.000000 -2.000000 0.000000 1.709976
1 1.442250 1.000000 1.442250 2.080084 -1.259921
2 -2.154435 1.259921 -2.154435 -2.000000 -2.154435
3 -1.442250 2.080084 1.442250 2.000000 1.259921
4 -1.817121 -1.912931 2.080084 1.442250 -1.442250
チェックと同じ210
np.random.seed([3,1415])
df = pd.DataFrame(np.random.randint(-10, 10, (5, 5)))
df
0 1 2 3 4
0 6 1 -8 0 5
1 3 1 3 9 -2
2 -10 2 -10 -8 -10
3 -3 9 3 8 2
4 -6 -7 9 3 -3
f = lambda x: np.sign(x) * np.power(abs(x), 1./3)
f(df)
0 1 2 3 4
0 1.817121 1.000000 -2.000000 0.000000 1.709976
1 1.442250 1.000000 1.442250 2.080084 -1.259921
2 -2.154435 1.259921 -2.154435 -2.000000 -2.154435
3 -1.442250 2.080084 1.442250 2.000000 1.259921
4 -1.817121 -1.912931 2.080084 1.442250 -1.442250
それはしかしNumPy >= 1.10
を必要
df[columns] = np.cbrt(df[columns])
:np.cbrt
:R
%timeit df.applymap(f)
%timeit f(df)
1000 loops, best of 3: 1.11 ms per loop
1000 loops, best of 3: 473 µs per loop
エラーを再現する作業例も提供できますか?サンプルで試してみましたが、うまくいきました。 – Tbaki