Python 为什么转置后的数据帧比原来的小?

Python 为什么转置后的数据帧比原来的小?,python,pandas,Python,Pandas,我有一个熊猫数据框,我用sys检查了它的大小 sys.getsizeof(df) # output: 136 如果我转置它,我会得到 sys.getsizeof(df.T) # output: 341 如果我转置两次,我会得到 sys.getsizeof(df.T.T) #output: 136 熊猫是如何管理记忆的 更新: 我使用df.memory\u usage来产生以下结果(这让我更加困惑,因为复制会产生更小的内存大小)。这与对象的数据类型有关吗?或者可能是列和索引字符串 df =

我有一个熊猫数据框,我用sys检查了它的大小

sys.getsizeof(df)
# output: 136
如果我转置它,我会得到

sys.getsizeof(df.T)
# output: 341
如果我转置两次,我会得到

sys.getsizeof(df.T.T)
#output: 136
熊猫是如何管理记忆的

更新:

我使用
df.memory\u usage
来产生以下结果(这让我更加困惑,因为复制会产生更小的内存大小)。这与对象的数据类型有关吗?或者可能是列和索引字符串

df = pd.DataFrame({"Total Unique Authors": author_count,
                              "Earliest Year": [earliest_year],
                              "Latest Year": [latest_year],
                              "Total Reviews": [total_reviews]})
print(df.memory_usage().sum())
print(df.copy().memory_usage().sum())
print(df.T.memory_usage().sum())
print(df.T.copy().memory_usage().sum())
输出

112
112
224
64

取自
sys
文档: 返回对象的大小(以字节为单位)。对象可以是任何类型的对象。所有内置对象都将返回正确的结果,但这对于第三方扩展不一定是真的,因为它是特定于实现的

只考虑直接归因于对象的内存消耗,而不考虑它所指对象的内存消耗

但是,我无法复制您的发现:

import sys
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(10,3))
print(sys.getsizeof(df))
print(sys.getsizeof(df.T))
导致

344
344

正如coldspeed评论的那样,
df.info()
或“df.memory\u usage()”更有用。

不要使用
sys.getsizeof
df.info()
是更好的使用指标
df.memory\u usage()
更好。@coldspeed谢谢。我做了一些改变,但仍然得到了一些有趣的结果,我无法解释…关于它们的原因的想法?谢谢你的建议。我对代码做了一些更新。查看是否可以在列名和索引中使用字符串重现数据。我想这就是记忆差异的来源,但我真的不明白。