python - 我如何在熊猫数据框中操作小数
问题描述
我有一个这样的数据框(df):
euro token
200.0 65.78947368421053
9997.8 2631.0
每当只有 .0 时,我想摆脱 .0 但是当“欧元”中只有一个小数点时,比如 0.8,我希望像通常使用货币一样使用小数点。因此,“欧元”列的定义将是 2 位小数,除非只有 0。对于“令牌”列,它将是 18 位小数,不显示尾随的 0,当只有 0 时没有小数。
我现在读了很多书,但什至找不到从哪里开始。有人吗?
更新了有关其他问题的示例
import pandas as pd
import numpy as np
min_invest = 200
cps_exchange_rate_eur = Decimal(38) / Decimal(10)
df = pd.read_excel(file.xlsx,
index_col=None,
dtype={'euro': float},
na_values='NA'
)
print(df.head())
print(df.dtypes)
email euro
0 first@gmail.com 600.00
1 second@web.de 200.00
2 third@web.de 1997.80
3 fourth@gmail.com 200.00
4 fifth@gmx.ch 9997.80
email object
euro float64
dtype: object
现在我正在尝试修复 2 个小数。:-)
df.loc[:, 'euro'] = np.round(df['euro'], decimals=2)
df.loc[:, 'euro_cent'] = (df['euro'] * 100).astype(int)
print(df.head()
print(df.dtypes)
email euro euro_cent
0 first@gmail.com 600.00 60000
1 second@web.de 200.00 20000
2 third@web.de 1997.80 199779
3 fourth@gmail.com 200.00 20000
4 fifth@gmx.ch 9997.80 999779
email object
euro float64
euro_cent int64
dtype: object
如您所见,第 2 行和第 4 行搞砸了。我不知道如何解决这个问题。
谢谢曼努埃尔
解决方案
您可以按照以下方式进行操作:
#sample
euro = [2, 2.3, 3.0, 4.0, 5.4444]
new_euro = [round(x) if x == round(x) else "{0:.2f}".format(x) for x in euro]
print(new_euro)
[2, '2.30', 3, 4, '5.44']
推荐阅读
- matlab - 为什么在此函数中计算重心权重时会出错?
- ffmpeg - 如何让 FFmpeg 制作视频的精确副本?
- jquery - 用 R 抓取网页但“下一页”按钮只有事件“转到顶部”
- java - C中的服务器向Java中的客户端发送文件,但接收到的文件不完整
- javascript - 中心 SVG
包围时的元素 元素有 text-anchor=start - ios - 我有一个表格视图,我允许多行选择,我想在下一个屏幕上显示它们
- javascript - 如何在 For...of 循环中替换数组中的所有 NaN 值
- visual-studio - 使用 Visual Studio 容器工具调试 blazor wasm
- ruby-on-rails - 在集成 Active Storage 和 Google Cloud Storage 时,storage.yml 中的“项目”键真的有必要吗?
- ffmpeg - 当输入是实时相机设备时,使用输入帧率选项(在 FFmpeg 中)时的预期行为是什么?