我想计算两只大熊猫列I
和Imean
用下面的代码的绝对差值之间pandas.apply()的区别返回NaN两列
def diff(row):
""" calculate absolute difference of this row """
return np.abs(row['I'] - row['Imean'])
spectrum['diff'] = spectrum.apply(diff, axis=1)
每当spectrum['I']
都是零,spectrum['diff']
包含所有nan
。我错过了什么? (如果我检查spectrum['I']
为全零的情况下,然后spectrum['diff'] = spectrum['Imean']
我可以规避错误但仍...)。
补充信息:
好吧,我进一步调查,并找到了我的问题。我通过曲线下方的面积归我的数据,并尝试通过零避免分裂,因为我知道,有可能是全零目前的数据。
s = spectrum['I'].sum()
try:
spectrum['I'] /= s
except ValueError:
spectrum['I'] = 0.0
我没有得到任何警告,运行时间从我的剧本,但如果我在IPython的控制台上运行我的代码,我得到RuntimeWarning: invalid value encountered in true_divide
和spectrum['I']
得到由NaN
条代替。如果我使用ZeroDivisionError
也是如此。 那么,如何正确地避免被零除这里?
有可能是一堆你错过的东西,但我注意到,失踪的第一件事是样本数据集。尝试在提出问题时遵循这些标准:http://stackoverflow.com/help/mcve – piRSquared