Python 如何按列条件正确选择行进行计算
我不理解熊猫在这种情况下的行为。显然,问题出在第3行,A列的值为负值,这导致了试图用分数次幂来提高它的数学问题 我使用df.loc限制了条件A>1下运行np.power的行。从第0行C列的NaN结果可以看出,过滤器工作正常,结果数据帧中的所有值都如预期的那样,但我得到了错误,因为np.power显然出于某种原因仍然计算第3行 您能帮助我理解为什么会发生这种情况,以及如何改进代码以避免错误吗Python 如何按列条件正确选择行进行计算,python,pandas,Python,Pandas,我不理解熊猫在这种情况下的行为。显然,问题出在第3行,A列的值为负值,这导致了试图用分数次幂来提高它的数学问题 我使用df.loc限制了条件A>1下运行np.power的行。从第0行C列的NaN结果可以看出,过滤器工作正常,结果数据帧中的所有值都如预期的那样,但我得到了错误,因为np.power显然出于某种原因仍然计算第3行 您能帮助我理解为什么会发生这种情况,以及如何改进代码以避免错误吗 data = [{'A': 1, 'B': 10}, {'A': 2, 'B': 10}
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
当你这样做的时候
np.power(df['A'],0.3)
df['A']
仍然是指整个列
相反,您可以使用mul
来避免警告:
df['C'] = np.power(df.loc[df.A > 1, 'A'], 0.3).mul(df.A)
>>> df
A B C
0 1 10 NaN
1 2 10 2.462289
2 3 10 4.171168
3 -1 10 NaN
另一个选项是再次选择:
df['C'] = df.loc[df.A > 1, 'A'] * np.power(df.loc[df.A>1,'A'],0.3)