1

<0.1検出限界を示す値を持つ Pandas TimeSeries があります。

In [1]: type(ts)
Out[1]: pandas.core.series.TimeSeries

In [2]: ts[55:63]
Out[2]: Date
2006-08-07    0.8809099
2006-08-21     1.027876
2007-07-10    0.5982836
2007-07-26          0.8
2007-08-09         <0.1
2007-08-23     1.013378
2008-07-14    0.6568888
2008-07-29    0.6966623
Name: PO4 uM

私は試してきました:

ts.str.contains('<0.1')

しかし、これを使用してデータ値を置き換える方法がわかりません。

これらの検出限界インジケーターを Pandas が処理できる値に置き換えるにはどうすればよいですか?

4

1 に答える 1

2

読むときにこれらの特別な値を削除するのが最善の策だと思います(そうすれば、あなたdtypeは正しいでしょうfloat64)。
これを行うにはread_csv(およびほとんどの同様の関数)、na_values引数があります。

na_values: list-like または dict、デフォルト None
    NA/NaN として認識する追加の文字列。dict が渡された場合、特定の列ごとの NA 値

注:コピーts[55:63]して使用しましたread_clipboard(これもこの引数を取ります)。

In [1]: pd.read_clipboard(sep='\s+', header=None, na_values='<0.1')
Out[1]: 
            0         1
0  2006-08-07  0.880910
1  2006-08-21  1.027876
2  2007-07-10  0.598284
3  2007-07-26  0.800000
4  2007-08-09       NaN
5  2007-08-23  1.013378
6  2008-07-14  0.656889
7  2008-07-29  0.696662

あなたが使用できる(時)シリーズに:

ts = pd.read_clipboard(sep='\s+', header=None, na_values='<0.1',
                       index_col=['date'], squeeze=True, names=['date', 'P04'],
                       parse_dates=['date'])

In [3]: ts
Out[3]: 
date
2006-08-07    0.880910
2006-08-21    1.027876
2007-07-10    0.598284
2007-07-26    0.800000
2007-08-09         NaN
2007-08-23    1.013378
2008-07-14    0.656889
2008-07-29    0.696662
Name: P04

これは、次を使用するよりもはるかにクリーンな方法のようです。

ts[ts.str.contains('<0.1')] = np.nan
于 2013-02-11T22:49:53.303 に答える