特别是,当我通过连接两个 Pandas Series 对象创建 DataFrame 时,Python 是创建一个新的内存位置并存储该系列的副本,还是只是创建对这两个系列的引用?
如果它只是引用,那么修改像 series.name = "new_name"
这样的系列会影响 DataFrame 的列名吗?
此外,从像 series = df['column_name']
这样的 DataFrame 中获取一个序列需要 O(1) 时间还是 O(n) 时间?
最佳答案
快速测试表明成本在连接中,而不是在取消引用中。所以,BLUF,df['s1'] 是 O(1) 而 concat 是 O(n)。
从每个系列 1 个单项到每个系列 4000 万个项目,取消引用花费的时间相似,而连接时间似乎呈线性增加。
使用这个简单的代码:
def func(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)
结果是:
关于python - Pandas 数据帧如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778067/