Python:将带有 NaN 的 numpy 数组更改为带有数字和 '--' 的数组

标签 python arrays numpy nan

我有一个 numpy 数组,其中包含一些 float 和一些 nan:

a = [ 8.08970226  nan  nan  8.30043545  nan  nan   nan  nan]

我想将其转换为数组(用于在 Latex 中打印)为混合形式:

a = ['8.08970226', '--', '--', '8.30043545', '--', '--', '--', '--']

我想出的方法不太优雅,是:

a=a.astype('|S10')
a[a=='nan']='--'
a=list(a)

有没有更优雅的方式来完成这项工作? (我可能会在第二行停下来满足我的 Latex 要求。)

感谢您的建议

最佳答案

使用numpy masked arrays

>>> import numpy as np
>>> a = np.array([ 8.08970226,  np.NAN,  np.NAN,  8.30043545,  np.NAN,  np.NAN,   np.NAN,  np.NAN])
>>> np.ma.fix_invalid(a)
masked_array(data = [8.08970226 -- -- 8.30043545 -- -- -- --],
             mask = [False  True  True False  True  True  True  True],
       fill_value = 1e+20)

>>> print _
[8.08970226 -- -- 8.30043545 -- -- -- --]

或者因为您需要它作为特定列表:

>>> np.ma.fix_invalid(a).astype('|S10').tolist(fill_value='--')
['8.08970226', '--', '--', '8.30043545', '--', '--', '--', '--']

关于Python:将带有 NaN 的 numpy 数组更改为带有数字和 '--' 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16996541/

相关文章:

python - 抛硬币、随机变量的算法和 PyMC3

python - Pygame 的基本网络

c - 布林带段错误

ruby-on-rails - 在 Ruby on Rails 中推送到数组

c++ - 排序数组文件 I/O

python - 使用 pd.Series bool 值索引 numpy 数组

python - 在不运行 Web 浏览器的情况下启动 IPython 笔记本服务器?

python - 将 python ndarray 转换为 matlab 矩阵

python - 数据类型传输/转换

python - 整数文字是Python中的一个对象?