You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

大型Pandas DataFrame传参返回最佳实践及SharePoint读写性能对比

大型Pandas DataFrame的函数传递/返回效率与最佳实践

核心问题解答

在Python中,Pandas DataFrame作为函数参数传递或从函数返回时,采用引用传递机制——不会复制整个数据集,仅传递内存地址。因此这类操作的性能开销极低,完全属于代码模块化的最佳实践:既不会额外占用大量内存,还能提升代码的复用性与可维护性。


场景a:写入1.5GB DataFrame到SharePoint

现有方案差异分析

两种方案的核心性能瓶颈并非DataFrame的传递,而是每次循环都重复调用getSharePointContext进行SharePoint认证——这是耗时的网络IO操作,会大幅拖慢整体速度。而DataFrame在方案1中的传递是引用传递,几乎无额外性能开销。

从代码结构看:

  • 方案1将写入逻辑封装为函数,代码复用性强、易于维护;
  • 方案2将所有逻辑平铺在主循环中,冗余度高,不利于后续扩展或修改。

推荐方案

优先选择优化后的方案1:将SharePoint上下文提前初始化一次,传入函数复用,避免每次循环重复认证。优化后的代码示例:

def writeData(largeDataframe, ctx, relpath, filename):
    target_folder = ctx.web.get_folder_by_server_relative_url(f"Shared Documents/{relpath}")
    buffer = io.BytesIO()
    largeDataframe.to_csv(buffer, index=False, encoding='utf-8', lineterminator='\n')
    buffer.seek(0)
    file_content = buffer.read()
    target_folder.upload_file(filename, file_content).execute_query()

if __name__ == '__main__':
    lisFiles = ["aa.csv","bb.csv"]
    # 仅初始化一次上下文
    ctx = getSharePointContext(uname, pwd)
    for file in lisFiles:
        df = pd.read_csv(file)
        # 处理df
        writeData(df, ctx, relpath, filename)

场景b:从SharePoint读取1.5GB CSV到DataFrame

现有方案差异分析

两种方案的性能几乎无差异:函数调用与DataFrame返回的开销可以忽略,核心耗时都集中在SharePoint认证、文件读取和Pandas解析CSV的步骤上。

代码结构层面:

  • 方案1的函数封装让读取逻辑可复用,比如后续读取多个SharePoint文件时无需重复编写相同代码;
  • 方案2的平铺式代码仅适用于单次读取场景,扩展性差。

推荐方案

优先选择优化后的方案1:同样提前初始化一次SharePoint上下文,传入函数复用,减少重复认证的开销。优化后的代码示例:

def readData(url, ctx):
    web = ctx.web
    ctx.load(web)
    ctx.execute_query()
    response = File.open_binary(ctx, url)
    bytes_file_obj = io.BytesIO(response.content)
    return pd.read_csv(bytes_file_obj, dtype=str, encoding='utf-8')

if __name__ == '__main__':
    # 仅初始化一次上下文
    ctx = getSharePointContext(uname, pwd)
    df1 = readData(url1, ctx)

内容的提问来源于stack exchange,提问作者MVKXXX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 13:42:52