我有一个DataFrame
:
0 1
0 3.000 5.600
1 1.200 3.456
出于演示目的,我希望将其转换为
0 1
0 3 5.6
1 1.2 3.456
实现此目的的优雅方法是什么(不会低效地循环 DataFrame
的条目)?
或者更笼统地说:是否有办法设置 pandas
使其始终如此?例如。 pandas
选项之一?
请注意 pd.options.display.float_format = '{:,.0f}'.format
将不起作用,因为它会给出固定的小数位数,而不是让它随时间变化DataFrame
的条目,如上所示。
最佳答案
In [188]: df
Out[188]:
a b c
0 1.0000 2.2460 2.0000
1 3.0000 4.4920 6.0000
2 5.0000 6.7380 10.0000
In [189]: pd.options.display.float_format = '{:,.2f}'.format
In [190]: df.apply(lambda x: x.astype(int) if np.allclose(x, x.astype(int)) else x)
Out[190]:
a b c
0 1 2.25 2
1 3 4.49 6
2 5 6.74 10
更新:
In [222]: df
Out[222]:
0 1
0 3.0000 5.6000
1 1.2000 3.4560
In [223]: df.applymap(lambda x: str(int(x)) if abs(x - int(x)) < 1e-6 else str(round(x,2)))
Out[223]:
0 1
0 3 5.6
1 1.2 3.46
注意:请注意,.applymap() 方法非常慢,因为它为 DataFrame 中的每个系列执行 map(func, series)
关于python - pandas DataFrame 中的自定义浮点格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42735541/