pandas - 如何将包含破折号(-)的两列相乘?
问题描述
df = pd.DataFrame({
'A': [15, '-', 173, 190, 68],
'B': ['-', 254, '-', 16, 76],
'C': [12, '-', 110, 35, 98],
'D': [125, 89, 308, 211, 174],
'E': [19, 21, '-', 162, '-']
})
我有两列要相乘,但这些列包括“-”。在将破折号转换为浮点数或替换为 0 之前,我可以进行乘法运算,但我不想要太多的破折号。此外,当我将数据导出到 Excel 时,由于这些破折号,我的数据会转换为字符串。我希望所有这些都是整数或浮点数,但包括破折号。可能吗?如何在不删除破折号(-)的情况下将这些列相乘?
解决方案
我认为你的想法是最好的 - 用-
数字替换,例如 by NaN
,因为对于 multiple 是必要的所有数值:
df = df.mask(df.values == '-').astype(float)
或者:
df = df.apply(pd.to_numeric, errors='coerce')
print (df)
A B C D E
0 15.0 NaN 12.0 125.0 19.0
1 NaN 254.0 NaN 89.0 21.0
2 173.0 NaN 110.0 308.0 NaN
3 190.0 16.0 35.0 211.0 162.0
4 68.0 76.0 98.0 174.0 NaN
最后如果需要-
返回:
df = df.fillna('-')
na_rep
或通过参数转换缺失值DataFrame.to_excel
:
df.to_excel(file, na_rep='-')
但是在函数中使用 try-expect 是可能的,但速度很慢,所以不推荐:
def mult_with_dash(x):
try:
return float(x['A']) * float(x['E'])
except Exception:
return '-'
df['new'] = df.apply(mult_with_dash, axis=1)
print (df)
A B C D E new
0 15 - 12 125 19 285
1 - 254 - 89 21 -
2 173 - 110 308 - -
3 190 16 35 211 162 30780
4 68 76 98 174 - -
推荐阅读
- php - 如果 WooCommerce 单品中的内容为空,则隐藏自定义产品选项卡
- javascript - Nuxt.js 配置设置以在构建中加载自定义文件
- javascript - 如何在 Firebase 中保存 HTML 输入?
- rust - 如何将附加参数传递给 trait 的显示或调试实现?
- oracle - 使用触发器删除特定行(员工)后,如何编写 PL/SQL 程序来获取行数(员工人数)?
- swift5 - JSQMessagesViewController 中的 inputToolbar 不起作用
- javascript - 有没有 for 循环的替代方案?
- pmd - PMD Xpath 属性列表[字符串]
- jquery - Select2 jQuery - 如何在 Select2 下拉列表中选择特定元素以更改任意 css 属性?
- python - 自定义哈希:对象在字典中吗?