4

次の内容のダム テキスト ファイルがあるとします。

Year    Recon   Observed
1505    162.38        23      
1506     46.14     -9999      
1507    147.49     -9999      

-9999欠損値を示すために使用されます (質問しないでください)。

したがって、これを次のように Numpy 配列に読み込むことができるはずです。

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

そして、すべての小さな-9999s を numpy.nan に変えます。しかし、私は得る:

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

…そうじゃない…

何か不足していますか?

4

3 に答える 3

11

いいえ、あなたは何も悪いことをしていません。missing_values引数を使用するnp.genfromtxtと、対応する値に「欠落/無効」のフラグを立てる必要があることがわかります。問題は、引数を使用する場合にのみ欠損値の処理がサポートされることです(ドキュメントusemask=Trueで明確にする必要がありましたが、残念です)。

ではusemask=True、出力はマスクされた配列です。欠落している値をメソッドでndarray置き換えて、通常の値に変換できます。np.nan.filled(np.nan)

ただし、注意してください: dtype を持つと検出された列があり、intその欠損値を で埋めようとすると、期待した結果np.nanが得られません (np.nanは float 列でのみサポートされます)。

于 2012-09-05T10:27:49.993 に答える
2

しようとしている:

>>> x = np.genfromtxt("file.txt",names = True, missing_values = "-9999", dtype=None)
>>> x
array([(1505, 162.38, 23), (1506, 46.14, -9999), (1507, 147.49, -9999)], 
      dtype=[('Year', '<i8'), ('Recon', '<f8'), ('Observed', '<i8')])

は正しい答えを与えません。したがって、文字列にするだけでは役に立ちません。ただし、追加のフラグusemask=Trueを追加すると、次のようになります。

>>> x = np.genfromtxt("file.txt",names = True, missing_values = -9999, dtype=None, usemask=True)
>>> x
masked_array(data = [(1505, 162.38, 23) (1506, 46.14, --) (1507, 147.49, --)],
             mask = [(False, False, False) (False, False, True) (False, False, True)],
       fill_value = (999999, 1e+20, 999999),
            dtype = [('Year', '<i8'), ('Recon', '<f8'), ('Observed', '<i8')])  

いずれにせよ、MaskedArray で必要なものが得られます。

于 2012-09-05T05:09:00.800 に答える
-1

SciPyのnumpyのドキュメントでは、missing_valueは希望どおりに機能する文字列である必要があると示唆されています。まっすぐな数値は、列インデックスとして解釈されるようです。

于 2012-09-05T05:06:19.040 に答える