2017-08-12 18 views
1

私はいくつかの降雨データのデータ分析をしようとしています。データの例は次のようになります -パンダの特定の文字列を数値に変換する

10 18/05/2016 26.9  40 20.8  34 52.2 20.8 46.5  45 
11 19/05/2016 25.5  32  0.3 41.6  42  0.3 56.3 65.2 
12 20/05/2016 8.5  29 18.4  9  36 18.4 28.6  46 
13 21/05/2016 24.5  18 TRACE 3.5  17 TRACE 4.4  40 
14 22/05/2016 0.6  18  0 6.5  14  0 8.6  20 
15 23/05/2016 3.5  9  0.6 4.3  14  0.6  7  15 
16 24/05/2016 3.6  25  T  3  12  T 14.9  9 
17 25/05/2016  25  21  2.2 25.6  50  2.2  25  9 

雨量データは、特定の文字列「TRACE」または「T」(両方とも測定不能な降雨量を意味する)を含有します。分析のために、私はこの文字列を '1.0'(float)に変換したいと思います。線図として値をプロットするように私の所望のデータが次のようになります -

10 18/05/2016 26.9  40 20.8  34 52.2 20.8 46.5  45 
11 19/05/2016 25.5  32  0.3 41.6  42  0.3 56.3 65.2 
12 20/05/2016 8.5  29 18.4  9  36 18.4 28.6  46 
13 21/05/2016 24.5  18  1.0 3.5  17  1.0 4.4  40 
14 22/05/2016 0.6  18  0 6.5  14  0 8.6  20 
15 23/05/2016 3.5  9  0.6 4.3  14  0.6  7  15 
16 24/05/2016 3.6  25  1.0  3  12  1.0 14.9  9 
17 25/05/2016  25  21  2.2 25.6  50  2.2  25  9 

いくつかのいずれかが正しい方向に私を指すことができますか?

答えて

3

あなたはdf.replaceを使用して、df.astype使用floatに数値を変換する(objectになり、元のデータ型を、ので、これらの列に対するすべての操作は、まだパフォーマンスの問題に苦しむでしょう)することができます

df = df.replace('^T(RACE)?$', 1.0, regex=True) 
df.iloc[:, 1:] = df.iloc[:, 1:].astype(float) # converting object columns to floats 

これが置き換えられますすべてTまたはTRACEの要素は1.0です。

出力:

10 18/05/2016 26.9 40 20.8 34.0 52.2 20.8 46.5 45.0 
11 19/05/2016 25.5 32 0.3 41.6 42.0 0.3 56.3 65.2 
12 20/05/2016 8.5 29 18.4 9.0 36.0 18.4 28.6 46.0 
13 21/05/2016 24.5 18  1 3.5 17.0  1 4.4 40.0 
14 22/05/2016 0.6 18  0 6.5 14.0  0 8.6 20.0 
15 23/05/2016 3.5 9 0.6 4.3 14.0 0.6 7.0 15.0 
16 24/05/2016 3.6 25  1 3.0 12.0  1 14.9 9.0 
17 25/05/2016 25.0 21 2.2 25.6 50.0 2.2 25.0 9.0 
+0

おめでとう私!これは私の1000番目の答えです。 –

+0

問題を修正していただきありがとうございます。新しいルールでは3分以内に回答を受け入れることができません。待つ。 –

+0

元々テキスト値(つまり 'T'または 'TRACE')を含んでいた列は、依然として 'object'型であると考えられます。おそらくそれらを浮動小数点に変換する必要があります。 – Alexander

2

使用replacedictによって:

df = df.replace({'T':1.0, 'TRACE':1.0}) 

そしてfloatに必要な変換列の場合:

cols = df.columns.difference(['Date','another cols dont need convert']) 
df[cols] = df[cols].astype(float) 

df = df.replace({'T':1.0, 'TRACE':1.0}) 
cols = df.columns.difference(['Date','a']) 
df[cols] = df[cols].astype(float) 
print (df) 
    a  Date  2  3  4  5  6  7  8  9 
0 10 18/05/2016 26.9 40.0 20.8 34.0 52.2 20.8 46.5 45.0 
1 11 19/05/2016 25.5 32.0 0.3 41.6 42.0 0.3 56.3 65.2 
2 12 20/05/2016 8.5 29.0 18.4 9.0 36.0 18.4 28.6 46.0 
3 13 21/05/2016 24.5 18.0 1.0 3.5 17.0 1.0 4.4 40.0 
4 14 22/05/2016 0.6 18.0 0.0 6.5 14.0 0.0 8.6 20.0 
5 15 23/05/2016 3.5 9.0 0.6 4.3 14.0 0.6 7.0 15.0 
6 16 24/05/2016 3.6 25.0 1.0 3.0 12.0 1.0 14.9 9.0 
7 17 25/05/2016 25.0 21.0 2.2 25.6 50.0 2.2 25.0 9.0 

print (df.dtypes) 
a   int64 
Date  object 
2  float64 
3  float64 
4  float64 
5  float64 
6  float64 
7  float64 
8  float64 
9  float64 
dtype: object 
0

@jezraelから答えを拡張すると、あなたは交換し、単一のステートメントに浮くために変換することができます(最初の列がDateであると想定して、残りのある希望の数値列):

df.iloc[:, 1:] = df.iloc[:, 1:].replace({'T':1.0, 'TRACE':1.0}).astype(float) 
関連する問題