繁体   English   中英

为什么将np.nan转换为int会产生大量结果?

[英]Why converting np.nan to int results in huge number?

我有一个像下面这样的numpy数组:

array([['18.0', '11.0', '5.0', ..., '19.0', '18.0', '20.0'],
       ['11.0', '14.0', '15.0', ..., '45.0', '26.0', '20.0'],
       ['1.0', '0.0', '1.0', ..., '3.0', '4.0', '17.0'],
       ...,
       ['nan', 'nan', 'nan', ..., 'nan', 'nan', 'nan'],
       ['nan', 'nan', 'nan', ..., 'nan', 'nan', 'nan'],
       ['nan', 'nan', 'nan', ..., 'nan', 'nan', 'nan']],
      dtype='|S230')

但是将其转换为int数组会使np.nan值成为奇怪的值:

df[:,4:].astype('float').astype('int')

array([[                  18,                   11,                    5,
        ...,                   19,                   18,
                          20],
       [                  11,                   14,                   15,
        ...,                   45,                   26,
                          20],
       [                   1,                    0,                    1,
        ...,                    3,                    4,
                          17],
       ...,
       [-9223372036854775808, -9223372036854775808, -9223372036854775808,
        ..., -9223372036854775808, -9223372036854775808,
        -9223372036854775808],
       [-9223372036854775808, -9223372036854775808, -9223372036854775808,
        ..., -9223372036854775808, -9223372036854775808,
        -9223372036854775808],
       [-9223372036854775808, -9223372036854775808, -9223372036854775808,
        ..., -9223372036854775808, -9223372036854775808,
        -9223372036854775808]])

那么如何解决我的问题呢?

据我所知,将浮点Nan转换为整数类型是未定义的行为。 号码:

-9223372036854775808

是最小的int64,即-2**63 请注意,当我强制使用int32时,在我的系统上int32发生同样的事情:

>>> arr
array([['18.0', '11.0', '5.0', 'nan']],
      dtype='<U4')
>>> arr.astype('float').astype(np.int32)
array([[         18,          11,           5, -2147483648]], dtype=int32)
>>> -2**31
-2147483648

这完全取决于您期望的结果。 nan是浮点型的,因此将字符串'nan'转换为float没问题。 但是没有将其转换为int值的定义。

我建议你处理不同的看法-第一选择什么spcific int你希望所有的nan值成为(例如0),然后才转换整个数组int

a = np.array(['1','2','3','nan','nan'])
a[a=='nan'] = 0 # this will convert all the nan values to 0, or choose another number
a = a.astype('int')

现在a等于

array([1, 2, 3, 0, 0])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM