将字符串值的格式更改为df

时间:2017-08-13 09:09:56

标签: pandas

我有以下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。

我如何获得所需的输出?

1 个答案:

答案 0 :(得分:1)

我认为您需要replace,但值也包含-,因此无法转换为数字:

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

如果需要所有值numeric和values仅包含-个字符:

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

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