0

次のような出力を取得しようとしています。

169.764569892,  572870.0,  19.6976

ただし、入力しているファイルの形式が先ほど示した出力に似ているため、問題がありますが、データの一部の行には、削除する必要がある変数として「nan」があります。私はそうするためにこれを使用しようとしています:

TData_Pre_Out = map(itemgetter(0, 7, 8), HDU_DATA) 
TData_Pre_Filter = [Data for Data in TData_Pre_Out if Data != 'nan']

ここでは、リスト内包表記を使用して「nan」を削除しようとしていますが、出力にはまだそれが表示されます。これを適切にフィルタリングするための助けがあれば、大歓迎です。

編集:不適切な出力は次のようになります。

169.519361471,  nan,  nan

上に示したものの代わりに。また、いくつかの詳細情報:1) これは、テキスト ファイルではなく、特別なデータ ファイルからのものであるため、行の分割は機能しません。2) 入力は出力とまったく同じで、上に示した map() 行を使用してマッピングされ、実際に必要なインデックスに分割されています (つまり、L = [(1,2 のようなすべてのデータ リストを使用する代わりに) ,3),(3,4,5)] データ構造の要点を示すために、そのリストから 1 と 3 のみを取り出します) データは次のように読み込まれます。

with pyfits.open(allfiles) as HDU:
HDU_DATA = HDU[1].data

構文は特殊なプログラムからのものですが、アイデアはわかります

4

3 に答える 3

1

データをどのように読み取ったかを示さなければ、解は推測することしかできません。

ただし、HDU_DATA実際のNaN値を保存する場合は、次のことを試してください。

variable とNaNs の比較は、等値演算子では機能しません==:

foo == nan

wherenanと foo は両方ともNaNs であり、常に false を返します。

math.isnan()代わりに使用してください:

import math
...if math.isnan(Data)…
于 2013-07-18T18:07:59.957 に答える
0

あなたの説明の私の理解に基づいて、これはうまくいくかもしれません

with open('path/to/file') as infile:
    for line in infile:
        vals = line.strip().split(',')
        print[v for v in vals if v!='nan']
于 2013-07-18T18:08:19.593 に答える