我正在尝试更改pd数据框列的格式而不更改数据类型。
这是我所拥有的:df = pd.DataFrame({'Age': [24.0, 32.0}])
我想用24 32
类型或24.00 32.00
表示Age并将它们保持为浮点数。
这是我可以做的:
df['Age'].map('{:,.2f}'.format)
但是此行将数据类型更改为对象。 我也在尝试申请:`
df = df.style.format({'Age': '{:,.2f}'.format})`
但是其中有问题。请帮助找出正确的方法。
答案 0 :(得分:2)
您的dataFrame本身为float类型。
数据框:
>>> df
Age
0 24.0
1 32.0
检查DataFrame类型:
>>> df.dtypes
Age float64
dtype: object
检查dtype是否为DataFrame列类型:
>>> df.Age
0 24.0
1 32.0
Name: Age, dtype: float64
或者甚至检查:
>>> df['Age'].dtype.kind
'f'
您使用正确的方法来舍入两位数字零是正确的,但是将它们再次转换为浮点数将使它们保持为浮点数而保持为单个零。
>>> df['Age'].map('{:,.2f}'.format)
0 24.00
1 32.00
Name: Age, dtype: object
由于您希望保持类似int值24, 32
或24.00 & 32.00
之类的模仿,如果仅对浮点数的显示感兴趣,则可以执行pd.set_option('display.float_format','{:.0f}'.format)
,实际上并没有影响您的数据。
>>> pd.set_option('display.float_format','{:.0f}'.format)
>>> df
Age
0 24
1 32
>>> df.dtypes
Age float64
dtype: object
>>> pd.set_option('display.float_format','{:.2f}'.format)
>>> df
Age
0 24.00
1 32.00
>>> df.dtypes
Age float64
dtype: object
设置显示精度选项:
>>> pd.set_option('precision', 0)
>>> df
Age
0 24
1 32
>>> df.dtypes
Age float64
dtype: object
答案 1 :(得分:0)
我相信使用df.round是最好的方法:
>>> df = pd.DataFrame({'Age': [24.0, 32.0]})
>>> df2 = df.round({'Ages': 2})
>>> print(df2.dtypes)
>>> df2
Age
0 24.00
1 32.00
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.round.html