2017-08-13 5 views
0

dfの一部の値は文字列(%付きのもの)で、その他のものは文字列ではありません。文字列値のフォーマットをdfの数値に変更します

      test overall 
Quents Ratio   270.01% 256.02% 
Amount sulphur   0.17  0.19 
Amount salt     - 20.89 
amount silica    4.29% 6.84% 

私は2つの列の中でいくつかの分析を実行したいと考えているので、すべての値を数値にしたいと思います。

所望の出力:

      test overall 
Quents Ratio   270.01 256.02 
Amount sulphur   0.17  0.19 
Amount salt     - 20.89 
amount silica    4.29  6.84 

私は何をしようとしたことにある。

def numeric_df(df): 
    df_detail=df.loc[['Quents Ratio','amount silica'],:] 
    df_detail= df_detail.apply(lambda x:str(x)[:-1]) 
    return df 

しかし、同じ初期DFを返します。

どのようにして希望の出力を得ることができますか?

+0

'NaN'に' -'を置き換える必要がありますか? – jezrael

+0

いいえいいえ、私はそれを望んでいます – ge00rge

+0

hmmmしかし、 '--'は文字列なので、値は数値ではありません。 – jezrael

答えて

1

私はあなたがreplaceが必要だと思うが、値が-は、また、数値にとても不可能変換含まれています

df = df.replace({'%': '', '^-$':np.nan}, regex=True).astype(float) 
print (df) 
        test overall 
Quents Ratio 270.01 256.02 
Amount sulphur 0.17  0.19 
Amount salt  NaN 20.89 
amount silica  4.29  6.84 

別の解決策:すべての数値と値が唯一-文字が含まれている必要がある場合は

df = df.replace('%', '', regex=True) 

to_numericで - それ以外のすべての数値をNaNに置き換えます。

df = df.replace('%', '', regex=True).apply(pd.to_numeric, errors='coerce') 
print (df) 
        test overall 
Quents Ratio 270.01 256.02 
Amount sulphur 0.17  0.19 
Amount salt  NaN 20.89 
amount silica  4.29  6.84 
関連する問題