pandas DataFrame 中的浮点和整数格式

问题描述 投票:0回答:1

我有一个数据框,我想将数据框的一部分格式化为浮点数,另一部分格式化为整数。基本上,如果小数不为零,我想用三位小数格式化数据帧,如果三位小数为零,则格式化为整数。

A B C D E
120000.0000 1500000.0000 8.343 2.325 6.453
150000.0000 120000.0000 4.875 3.838 53.348
160000.0000 -12600000000 1.406 5.350 100.242
180000.0000 -2640000.0000 NaN 6.863 147.136
210000.0000 -4020000.0000 -2.063 8.376 194.031
Data type
A    float64
B    float64
C    float64
D    float64
E    float64
dtype: object

我使用了以下代码:

# Custom formatting function
def custom_format(value):
    if pd.isnull(value) or np.isinf(value):
        return value
    rounded_value = round(value, 3)
    if rounded_value == int(rounded_value):
        formatted_value = f'{int(rounded_value):.0f}'  # Show whole number only
    else:
        formatted_value = f'{rounded_value:.3f}'  # Show three decimals
    return formatted_value

# Apply custom formatting to the entire DataFrame
formatted_df = df.applymap(custom_format)

formatted_df

这就是我得到的:

A B C D E
120000 1500000 8.343 2.325 6.453
150000 120000 4.875 3.838 53.348
160000 -1260000 1.406 5.350 100.242
180000 -2640000 NaN 6.863 147.136
210000 -4020000 -2.063 8.376 194.031

这就是我想要的,但是,数据类型改变了,变成了这样:

A    object
B    object
C    object
D    object
E    object
dtype: object

问题是我需要这些值是数字,同时保持以前的格式。我尝试了多个代码,但对象格式始终保持不变。

python decimal dtype
1个回答
0
投票

您可以在代码末尾将列转换回数字类型

formatted_df = formatted_df.apply(pd.to_numeric)
© www.soinside.com 2019 - 2024. All rights reserved.