Pandas数据帧是如何存储在内存中的?

2024-04-23 23:42:21 发布

您现在位置:Python中文网/ 问答频道 /正文

特别是,当我通过连接两个Pandas系列对象来创建数据帧时,Python是创建一个新的内存位置并存储序列的副本,还是仅仅创建对这两个系列的引用?在

如果它只是引用,那么像series.name = "new_name"这样修改序列会影响数据帧的列名吗?在

同样,从series = df['column_name']这样的数据帧获取序列需要O(1)时间还是O(n)时间?在


Tags: 数据对象内存namepandasdfnew时间
1条回答
网友
1楼 · 发布于 2024-04-23 23:42:21

一个快速测试表明,成本在concat中,而不是在dereference中。所以,BLUF,df['s1']是O(1),而concat是O(n)。在

从每个系列的1个项目运行到每个系列的4000万个项目,取消引用所需的时间相似,而concat时间似乎呈线性增加。在

使用以下简单代码: 定义函数(frange):

a1 = []
a2 = []
for x in numpy.arange(frange):
    a1.append(x)
    a2.append(-x)

s1 = pd.Series(a1, index=a1, name='s1')
s2 = pd.Series(a2, index=a1, name='s2')
cstart =  time.perf_counter();
df = pd.concat([s1, s2], axis=1)
cend = time.perf_counter();

tstart =  time.perf_counter();
for y in range(100):
    series = df['s1']
    series2 = df['s2']
tend = time.perf_counter();

print (frange,',', cend-cstart,tend-tstart)

结果是:

enter image description here

相关问题 更多 >