python - pandas DataFrame 中的自定义浮点格式

标签 python python-3.x pandas dataframe formatting

我有一个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/

相关文章:

python - Django Rest Framework中的AuthToken : non_field_errors

python - 为什么 pandas 中使用的函数行为会发生变化?

Python:使用异常参数时出现语法错误

python-3.x - 在Python 3中从给定集合中查找给定长度的所有可能序列

python - 日期时间行为类型错误: parser() missing 1 required positional argument:

python - 如何从列表类别中对 pandas 数据框进行排序?

Python在PyQt中一键调用两个函数

python - 从数据中删除序列 Pandas Python Numpy

python - 如何使用for循环乘以python DataFrame中的单个值

python - 如何在不使用 for 循环的情况下将包含等长列表的字典列表转换为数据帧