2024-04-23 23:42:21 发布
网友
特别是,当我通过连接两个Pandas系列对象来创建数据帧时,Python是创建一个新的内存位置并存储序列的副本,还是仅仅创建对这两个系列的引用?在
如果它只是引用,那么像series.name = "new_name"这样修改序列会影响数据帧的列名吗?在
series.name = "new_name"
同样,从series = df['column_name']这样的数据帧获取序列需要O(1)时间还是O(n)时间?在
series = df['column_name']
一个快速测试表明,成本在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)
结果是:
一个快速测试表明,成本在concat中,而不是在dereference中。所以,BLUF,df['s1']是O(1),而concat是O(n)。在
从每个系列的1个项目运行到每个系列的4000万个项目,取消引用所需的时间相似,而concat时间似乎呈线性增加。在
使用以下简单代码: 定义函数(frange):
结果是:
相关问题 更多 >
编程相关推荐