python - Pandas 数据帧如何存储在内存中?

标签 python pandas

特别是,当我通过连接两个 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)

结果是:

enter image description here

关于python - Pandas 数据帧如何存储在内存中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778067/

相关文章:

python-3.x - 我想将国家列表与列数据进行比较,列数据是 pandas 数据框 Python 中的字典对象类型

python - 如何模拟 AWS DynamoDB 服务?

python - 创建一个新列,该列是每个用户从第一个订单日期算起的周数?

python - 将一列中的数据分成三列

python - 通过 Python 脚本向 Inkscape 中的对象添加节点

python - Pandas:如何使用查询来选择最接近的值

python - 根据不同列中的值是否属于列表,有选择地填充 Pandas 列

python - 组合函数以产生所需的整数输出

python - 在 matplotlib 中,如何绘制从轴向外指向的 R 样式轴刻度?

python - 使用 pandas 将多数据类型数据帧转换为 python 中的整数编码数据帧