为何Pandas DataFrame成员的repr表示如此冗长?
为什么
df.tail的repr会包含整个DataFrame的数据? 我来给你捋清楚这个问题——你遇到的情况其实是Python方法对象的repr特性和pandas的DataFrame repr逻辑共同导致的,并不是tail方法存了数据副本。
先看你给出的代码和现象:
import pandas as pd df = pd.DataFrame([pd.Series(range(100))]*100) df.tail
执行后输出的绑定方法表示里,居然带了整个DataFrame的预览数据:
<bound method NDFrame.tail of 0 1 2 3 4 5 6 7 8 9 ... 90 91 92 93 94 95 96
0 0 1 2 3 4 5 6 7 8 9 ... 90 91 92 93 94 95 96
1 0 1 2 3 4 5 6 7 8 9 ... 90 91 92 93 94 95 96
...
你测试后还发现这个repr的行数多达127行:
len(repr(df.tail).split('\n')) # 结果是127
原因解释
这里的核心问题是:df.tail是一个绑定方法对象——它是绑定到df这个DataFrame实例上的方法。当Python生成这个方法对象的repr时,会包含该方法所属实例的信息。而pandas的DataFrame在被repr的时候,默认会输出部分数据内容做预览,所以就导致方法的repr里混进了整个DataFrame的预览数据,看起来像是方法本身存了一份数据副本,但实际上完全不是这么回事。
解决办法
你可以根据需求选择正确的操作:
- 如果是想查看DataFrame的末尾行:一定要给
tail加括号,调用方法本身——df.tail(),这样会返回默认最后5行的DataFrame,输出简洁正常。 - 如果是想查看
tail方法的文档或信息:用help(df.tail),这样只会显示方法的参数、功能说明,不会带出整个DataFrame的数据。
内容的提问来源于stack exchange,提问作者PyScripter
相关产品推荐
相关产品推荐

