对象类型列,其百分比以%表示,并以十进制表示,将全部转换为十进制

时间:2019-04-03 10:22:25

标签: python pandas

我有一个df:

   Percentage Purchased
0  50.00%     0
1  66.37%     1
2  50.00%     0
3  0.5        1
4  0.5000     1

“百分比”是对象类型,我希望最终结果是:

   Percentage Purchased
0  0.5000     0
1  0.6637     1
2  0.5000     0
3  0.5000     1
4  0.5000     1

我尝试使用:

df['Percentage'] = dataset['Percentage'].str.replace(r'%', r'').astype('float')/100

首先要将百分比转换为浮点数,然后将整个df转换为浮点数,但是 问题是上述代码将Naf已经替换为'0.5'/ 0.5000的字段

2 个答案:

答案 0 :(得分:2)

您可以使用to_numeric将所有不带百分比的值转换为浮点数,不可解析的值是NaN,因此可以用Series.str.replace创建的Series来替换它们-解决方案如果数据仅包含百分比数字和不包含百分比数字,则可以使用:

s = df['Percentage'].str.replace(r'%', r'').astype('float')/100
df['Percentage']  = pd.to_numeric(df['Percentage'], errors='coerce').fillna(s)
print (df)
   Percentage  Purchased
0      0.5000          0
1      0.6637          1
2      0.5000          0
3      0.5000          1
4      0.5000          1

另一种具有列表理解的解决方案,或者是apply,其中测试了值的百分比:

df['Percentage'] = [float(x.replace('%', ''))/100 
                    if '%' in x 
                    else float(x) for x in df['Percentage']]

f = lambda x: float(x.replace('%', ''))/100 if '%' in x else float(x)
df['Percentage'] = df['Percentage'].apply(f)

print (df)
   Percentage  Purchased
0      0.5000          0
1      0.6637          1
2      0.5000          0
3      0.5000          1
4      0.5000          1

答案 1 :(得分:1)

这可能有帮助:

df['Percentage'] = df.Percentage.apply(lambda x: format(float(x.split('%')[0]), '.4f'))
print(df)

     Percentage  Purchased
0      0.5000          0
1      0.6637          1
2      0.5000          0
3      0.5000          1
4      0.5000          1