Я не понимаю поведение панд в этой ситуации.Очевидно, проблема в строке 3, где столбец A имеет отрицательное значение, и это приводит к математической проблеме с попыткой поднять его на дробную мощность.
Я ограничил строки, где я хочу, чтобы эта np.power запускалась по условиюA> 1 с использованием df.loc.И из полученного NaN в строке 0, столбце C, очевидно, что фильтр работает нормально, и все значения в результирующем кадре данных соответствуют ожидаемым, но я получил ошибку, потому что np.power, очевидно, все еще вычисляет строку 3 по некоторым причинам.
Можете ли вы помочь мне понять, почему это происходит и как я могу улучшить код, чтобы избежать ошибок?
data = [{'A': 1, 'B': 10},
{'A': 2, 'B': 10},
{'A': 3, 'B': 10},
{'A': -1, 'B': 10}]
df = pd.DataFrame(data)
df
Out[4]:
A B
0 1 10
1 2 10
2 3 10
3 -1 10
df['C'] = df.loc[df.A > 1, 'A'] * np.power(df['A'],0.3)
df
/home/meteoadriatic/.local/lib/python3.5/site-packages/ipykernel_launcher.py:1: RuntimeWarning: invalid value encountered in power
"""Entry point for launching an IPython kernel.
Out[5]:
A B C
0 1 10 NaN
1 2 10 2.462289
2 3 10 4.171168
3 -1 10 NaN