首页 > 解决方案 > 我如何在熊猫数据框中操作小数

问题描述

我有一个这样的数据框(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 行搞砸了。我不知道如何解决这个问题。

谢谢曼努埃尔

标签: pythonpandasformattingnumbersdecimal

解决方案


您可以按照以下方式进行操作:

#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']

推荐阅读