不能用nansum和numpy中的列相加

时间:2017-08-23 03:37:39

标签: python pandas numpy

好的,这是我无法改变的先决条件:

  1. 我有一个包含单列的数据框
  2. 必须以numpy
  3. 进行转换和求和

    它看起来像这样,它从任意索引开始(我不认为我需要重新索引它以节省计算开销)

    3    1.32745e+06
    4              0
    5    6.07657e+08
    6            NaN
    

    以下不总结它但返回nan。我做错了什么?

    np_value = np_value.values
    print(np.nansum(np_value))
    

2 个答案:

答案 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

注意:在这种情况下很明显它是objectstring数组,因为0在float数组中显示为0.0。注意对象数组,这些数组很慢并且通常不受支持。