好的,这是我无法改变的先决条件:
它看起来像这样,它从任意索引开始(我不认为我需要重新索引它以节省计算开销)
3 1.32745e+06
4 0
5 6.07657e+08
6 NaN
以下不总结它但返回nan。我做错了什么?
np_value = np_value.values
print(np.nansum(np_value))
答案 0 :(得分:1)
请提供有关您的np_value的更多信息,因为我相信这是您出错的地方。我试过这个并得到了5的正确答案。
import numpy as np
import pandas as pd
#create numpy array of values
np_values = np.array([1,0,4,np.nan])
#put those values in a dataframe to test
np_values = pd.DataFrame(data=np_values)
#Take just the values of that data
np_value = np_values.values
print(np.nansum(np_value))
答案 1 :(得分:1)
np.nansum
无法在object
数组或字符串数组上运行:
>>> import numpy as np
>>> arr = np.array([1.32745e+06, 0, 6.07657e+08, 'NaN'], dtype=object)
>>> np.nansum(arr)
TypeError: unsupported operand type(s) for +: 'float' and 'str'
>>> arr = np.array([1.32745e+06, 0, 6.07657e+08, 'NaN'])
>>> np.nansum(arr)
TypeError: cannot perform reduce with flexible type
您需要将其转换为数字类型(例如float
)才能使其正常工作:
>>> np.nansum(arr.astype(float))
608984450.0
注意:在这种情况下很明显它是object
或string
数组,因为0
在float数组中显示为0.0
。注意对象数组,这些数组很慢并且通常不受支持。