python - 在 Pandas DataFrame 上使用 float_format 调用 to_string 时出现问题

标签 python pandas

当使用pandasDataFrame ,我可以to_string(float_format='%.1f')DataFrame上。然而,当将相同的方法应用于 df.describe() 时,失败了。

通过以下代码,该问题是不言自明的。

>>> df = pd.DataFrame([[1, 2, 'March'],[5, 6, 'Dec'],[3, 4, 'April'], [0, 1, 'March']], columns=['a','b','m']) 
>>> df
   a  b      m
0  1  2  March
1  5  6    Dec
2  3  4  April
3  0  1  March
>>> df.to_string(float_format='%.1f')
u'   a  b      m\n0  1  2  March\n1  5  6    Dec\n2  3  4  April\n3  0  1  March'
>>> df.describe().to_string(float_format='%.1f')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Python/2.7/site-packages/pandas/core/frame.py", line 1343, in to_string
    formatter.to_string()
  File "/Library/Python/2.7/site-packages/pandas/core/format.py", line 511, in to_string
    strcols = self._to_str_columns()
  File "/Library/Python/2.7/site-packages/pandas/core/format.py", line 439, in _to_str_columns
    fmt_values = self._format_col(i)
  File "/Library/Python/2.7/site-packages/pandas/core/format.py", line 693, in _format_col
    space=self.col_space
  File "/Library/Python/2.7/site-packages/pandas/core/format.py", line 1930, in format_array
    return fmt_obj.get_result()
  File "/Library/Python/2.7/site-packages/pandas/core/format.py", line 1946, in get_result
    fmt_values = self._format_strings()
  File "/Library/Python/2.7/site-packages/pandas/core/format.py", line 2022, in _format_strings
    fmt_values = [self.formatter(x) for x in self.values]
TypeError: 'str' object is not callable

最佳答案

它在你第一次工作,因为你的类型都不是 float 的。您可以使用 df.dtypes 进行检查:

In [37]: df.dtypes
Out[37]: 
a     int64
b     int64
m    object
dtype: object

来自docs :

float_format : one-parameter function, optional
formatter function to apply to columns’ elements if they are floats, default None. The result of this function must be a unicode string.

所以你需要传递一个函数而不是字符串:

df.describe().to_string(float_format=lambda x: '%.1f' % x)

或使用.format:

df.describe().to_string(float_format=lambda x: "{:.1f}".format(x))

关于python - 在 Pandas DataFrame 上使用 float_format 调用 to_string 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34097038/

相关文章:

python - 使用 DateTimeField 和 timedelta 默认值的 Django 迁移

python - 有没有办法查看 ROS 主题之前发布的消息,以便迟到的订阅者可以看到之前发布的数据?

python - 使用漂亮的汤通过python解析

python - 如何防止堆栈对索引进行排序?

python - 多索引数据框中列之间的数学运算

Python Curses 处理窗口(终端)调整大小

python - 用 Pandas 更改excel工作表的名称

python - Pandas 专栏: applying a function

python - 高效的时间序列滑动窗口函数

python - 根据列的最大值过滤 Pandas 数据框中的行