我有以下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 :(得分: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