我有一个数据框,我想将数据框的一部分格式化为浮点数,另一部分格式化为整数。基本上,如果小数不为零,我想用三位小数格式化数据帧,如果三位小数为零,则格式化为整数。
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
问题是我需要这些值是数字,同时保持以前的格式。我尝试了多个代码,但对象格式始终保持不变。
您可以在代码末尾将列转换回数字类型
formatted_df = formatted_df.apply(pd.to_numeric)