【问题标题】:Pandas set format for single dataframePandas 为单个数据框设置格式
【发布时间】:2014-10-08 07:04:50
【问题描述】:

问题

有没有办法只格式化一个特定的数据框?

我已经看到了格式化单个数据框的特定列的示例(示例 1)或将整个 pandas 库设置为默认选项(示例 2)。但是,我还没有看到在不明确列出每一列的情况下格式化特定数据框的选项。

设置

import pandas as pd
import numpy as np

# Setup first example
data = np.random.random((3,4))
df = pd.DataFrame(data)
print df
#          0         1         2         3
#0  0.384326  0.364187  0.084034  0.012376
#1  0.114784  0.298068  0.087634  0.828207
#2  0.255923  0.438617  0.820652  0.266964

示例 1 - 更改单个数据框中特定列的格式

df[3] = df[3].map('${:,.2f}'.format)
print df
#          0         1         2      3
#0  0.384326  0.364187  0.084034  $0.01
#1  0.114784  0.298068  0.087634  $0.83
#2  0.255923  0.438617  0.820652  $0.27

示例 2 - 更改所有 pandas 数据帧(包括新数据帧)的格式

pd.options.display.float_format = '${:,.2f}'.format
print(df)
#      0     1     2      3
#0 $0.38 $0.36 $0.08  $0.01
#1 $0.11 $0.30 $0.09  $0.83
#2 $0.26 $0.44 $0.82  $0.27

data2 = np.random.random((4,3))
df2 = pd.DataFrame(data2)
print df2
#      0     1     2
#0 $0.60 $0.37 $0.86
#1 $0.28 $0.06 $0.97
#2 $0.19 $0.68 $0.99
#3 $0.06 $0.88 $0.82

我一直在寻找类似于示例 2 的选项,但它不会将格式应用于未来的数据帧。谢谢!

编辑 - 抱歉,我应该更清楚地了解格式。示例 1 更改了数据类型,而示例 2 没有。我希望不必在数据类型之间进行转换(如果可能的话)。例如。第一个示例从浮点数变为非空对象:

df.info()
#<class 'pandas.core.frame.DataFrame'>
#Int64Index: 3 entries, 0 to 2
#Data columns (total 4 columns):
#0    3 non-null float64
#1    3 non-null float64
#2    3 non-null float64
#3    3 non-null object
#dtypes: float64(3), object(1)

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    像这样遍历列怎么样:

    for i in range(len(df.columns)):
        df[i] = df[i].map('${:,.2f}'.format)
    

    或者只是:

    df.applymap('${:,.2f}'.format)
    

    【讨论】:

    • 您可以将 for 循环简化为 for col in df:
    【解决方案2】:

    我认为最好的办法是将格式化程序传递给to_string

    In [283]: print df.to_string(float_format='${:,.2f}'.format)
          0     1     2     3
    0 $0.53 $0.01 $0.75 $0.61
    1 $0.54 $0.33 $0.42 $0.47
    2 $0.28 $0.67 $0.71 $0.53
    

    虽然这不会保留在数据框中。你可以做一些像这样的猴子补丁。

    In [286]: from functools import partial
    
    In [287]: df.to_string = partial(df.to_string, float_format='${:,.2f}'.format)
    
    In [288]: print df
          0     1     2     3
    0 $0.53 $0.01 $0.75 $0.61
    1 $0.54 $0.33 $0.42 $0.47
    2 $0.28 $0.67 $0.71 $0.53
    

    【讨论】:

    • 谢谢克里斯布!我投了赞成票,但接受了另一个答案,因为它不需要导入。我真的很喜欢你对部分的使用。
    猜你喜欢
    • 2018-08-13
    • 2019-12-05
    • 2018-02-28
    • 2021-12-31
    • 2018-12-15
    • 2023-01-20
    • 2021-11-02
    • 2011-10-22
    • 1970-01-01
    相关资源
    最近更新 更多