【问题标题】:change pandas 0.13.0 "print dataframe" to print dataframe like in earlier versions将 pandas 0.13.0“打印数据帧”更改为像早期版本一样打印数据帧
【发布时间】:2014-01-31 14:33:37
【问题描述】:

在新版本 0.13.0 的 pandas 中,数据帧 df 打印在一长串数字中,使用

df

print df

而不是像以前那样的概述,现在只能使用

df.info()

是否可以将默认的“df”或“print df”命令更改为显示:

In [12]: df.info()
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 4319 entries, 2010-02-18 00:00:00 to 2010-03-13 23:15:00
Data columns (total 2 columns):
QInt    4319  non-null values
QHea    4319  non-null values
dtypes: float32(2)

再次代替:

In [11]: df
Out[11]:
                                  QInt         QHea
2010-02-18 00:00:00         169.666672     0.000000
2010-02-18 00:15:00         152.000000    -0.000000
2010-02-18 00:15:00         152.000000    -0.000000
2010-02-18 00:30:00         155.000000    -0.000000
2010-02-18 00:30:04         155.063950    -0.000000
2010-02-18 00:30:04         155.063950 -1136.823364
2010-02-18 00:45:00         169.666672  4587.430176
2010-02-18 01:00:00         137.333328  4532.890137
2010-02-18 01:00:00         137.333328  4532.890137
2010-02-18 01:15:00         177.000000  4464.479980
2010-02-18 01:15:00         177.000000  4464.479980
2010-02-18 01:30:00         169.666672  4391.839844
2010-02-18 01:30:00         169.666672  4391.839844
2010-02-18 01:45:00         155.000000  4313.049805
2010-02-18 01:45:00         155.000000  4313.049805
2010-02-18 02:00:00         144.666672  4230.100098
2010-02-18 02:15:00         162.333328  4144.819824
2010-02-18 02:15:00         162.333328  4144.819824
2010-02-18 02:30:00         177.000000  4059.689941
2010-02-18 02:45:00         144.666672  3987.149902
2010-02-18 02:45:00         144.666672  3987.149902
2010-02-18 03:00:00         155.000000  3924.629883
2010-02-18 03:00:00         155.000000  3924.629883
2010-02-18 03:15:00         162.333328  3865.129883
2010-02-18 03:15:00         162.333328  3865.129883
2010-02-18 03:30:00         162.333328  3811.050049
2010-02-18 03:30:00         162.333328  3811.050049
2010-02-18 03:45:00         152.000000  3765.590088
2010-02-18 03:45:00         152.000000  3765.590088
2010-02-18 04:00:00         162.333328  3735.080078
2010-02-18 04:15:00         162.333328  3703.169922
2010-02-18 04:15:00         162.333328  3703.169922
2010-02-18 04:30:00         144.666672  3673.139893
2010-02-18 04:45:00         169.666672  3647.100098
2010-02-18 04:45:00         169.666672  3647.100098
2010-02-18 05:00:00         162.333328  3622.129883
2010-02-18 05:15:00         155.000000  3594.159912
2010-02-18 05:15:00         155.000000  3594.159912
2010-02-18 05:30:00         159.333328  3569.699951
2010-02-18 05:30:00         159.333328  3569.699951
2010-02-18 05:45:00         147.666672  3551.179932
2010-02-18 05:45:00         147.666672  3551.179932
2010-02-18 06:00:00         177.000000  3531.669922
2010-02-18 06:00:00         177.000000  3531.669922
2010-02-18 06:15:00         159.333328  3514.679932
2010-02-18 06:15:00         159.333328  3514.679932
2010-02-18 06:30:00         155.000000  3499.669922
2010-02-18 06:30:00         155.000000  3499.669922
2010-02-18 06:45:00         155.000000  3485.320068
2010-02-18 06:45:00         155.000000  3485.320068
2010-02-18 06:59:54.750000  162.291245    19.999992
2010-02-18 06:59:54.750000  162.291245     0.000000
2010-02-18 07:00:00         162.333328     0.000000
2010-02-18 07:00:00         162.333328     0.000000
2010-02-18 07:15:00         166.666672     0.000000
2010-02-18 07:15:00         166.666672     0.000000
2010-02-18 07:30:00         155.000000     0.000000
2010-02-18 07:30:00         155.000000     0.000000
2010-02-18 07:45:00         155.000000     0.000000
2010-02-18 07:45:00         155.000000     0.000000
                                   ...          ...

[4319 rows x 2 columns]

【问题讨论】:

  • 你可以编写一个自定义的__str__ 方法。或者从原始类派生一个类,并覆盖 __str__ 方法。

标签: python pandas dataframe


【解决方案1】:

设置

pd.options.display.large_repr = 'info'

从 v.0.13 开始,默认值为“截断”。

In [93]: df = pd.DataFrame(np.arange(4319*2).reshape(4319,2))

In [94]: pd.options.display.large_repr = 'info'

In [95]: df
Out[95]: 
<class 'pandas.core.frame.DataFrame'>
Int64Index: 4319 entries, 0 to 4318
Data columns (total 2 columns):
0    4319 non-null int32
1    4319 non-null int32
dtypes: int32(2)

我通过在以下输出中搜索字符串 'info()' 找到了:

In [65]: pd.set_option?

要使其成为交互式会话的默认行为:

如果您尚未设置,请将环境变量 PYTHONSTARTUP 定义为 /home/user/bin/startup.py 之类的东西

然后编辑/创建/home/user/bin/startup.py 以包含类似的内容

import pandas as pd
pd.options.display.large_repr = 'info'

现在,每当您启动交互式 Python 会话时,都会执行 startup.py 文件,您将可以通过 pd 变量访问 pandas,large_repr 默认为 'info'

【讨论】:

  • 感谢您的快速回答。 config_init.py 文件是相同的,它实际上打印了 60 行,但是如果我输入“df”而不是行 [11],我希望它在 df 时打印信息 [12]。这是我更新到 pandas 0.13.0 之前的行为
  • 糟糕,抱歉——我误会了。
  • 谢谢,这行得通!有什么办法可以将默认值更改为“信息”?
  • 直接修改默认值,需要将config_init.py中的第229行从cf.register_option('large_repr', 'truncate', pc_larg...改成cf.register_option('large_repr', 'info', pc_larg...
  • 是的,但有一些警告:随着更改列表的增加,直接破解源代码会变得很麻烦。每次升级 pandas 时都必须重新进行更改。此外,如果您依赖非标准行为,则可能会妨碍您使用他人代码的能力,反之亦然。
猜你喜欢
  • 1970-01-01
  • 2019-10-16
  • 2015-03-01
  • 1970-01-01
  • 2020-01-26
  • 2016-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多