使用numpy.genfromtxt()将-9999作为缺失值

bre*_*ews 2 python numpy genfromtxt

让我说我有一个愚蠢的文本文件与内容:

Year    Recon   Observed
1505    162.38        23      
1506     46.14     -9999      
1507    147.49     -9999      
Run Code Online (Sandbox Code Playgroud)

-9999 用于表示缺失值(不要问).

所以,我应该能够将其读入一个Numpy数组:

import numpy as np
x = np.genfromtxt("file.txt", dtype = None, names = True, missing_values = -9999)
Run Code Online (Sandbox Code Playgroud)

让我所有的小朋友-9999变成numpy.nan.但是,我得到:

>>> x
array([(1409, 112.38, 23), (1410, 56.14, -9999), (1411, 145.49, -9999)], 
  dtype=[('Year', '<i8'), ('Recon', '<f8'), ('Observed', '<i8')])
Run Code Online (Sandbox Code Playgroud)

... 那是不对的...

我错过了什么吗?

Pie*_* GM 9

不,你没有做错任何事.使用missing_values参数确实告诉np.genfromtxt相应的值应标记为"missing/invalid".问题是只有在使用usemask=True参数时才支持处理缺失值(我可能应该在文档中更清楚,我的错误).

使用时usemask=True,输出是一个屏蔽数组.您可以将其转换为常规ndarray,np.nan并使用方法替换缺少的值.filled(np.nan).

但是要小心:如果你有一个被检测为有intdtype的列并且你试图用它来填充它的缺失值np.nan,你就不会得到你所期望的(np.nan只有float列支持).