python - 对象类型列,百分比以 % 和十进制显示,全部转换为十进制
问题描述
我有一个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 转换为浮点数,但问题是上面的代码用 NaN 替换了已经有 '0.5' / 0.5000 的字段
解决方案
您可以使用to_numeric
将所有没有百分比的值转换为浮点数,不可解析的值是NaN
s,因此可以通过Series
创建来替换它们Series.str.replace
- 如果数据仅包含百分比和非百分比数字,则解决方案工作:
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
推荐阅读
- ubuntu-18.04 - NFS 内核服务器活动但已退出状态
- java - 客户端可以负责按需创建由 HikariCP(或其他池解决方案)管理的 java.sql.Connnection 吗?
- java - 有没有办法在无限滚动网站上用硒捕获“div”元素?
- python - python:修改参数而不创建新对象
- html - 如何比较来自firebase的两个字符串的总和
- android - NativeScript HTTP 获取请求不起作用。安卓版本问题?
- javascript - 创建一个读取文本并使用它的 API
- c# - 我想创建 get 方法来从我的 mongo 服务器返回原始 bson 文档,而不将它们映射到具有特定字段的模型
- javascript - 设置状态后无法发送响应
- javascript - 如何添加前缀以响应本机文本输入?