【问题标题】:How to refactor `with` statement in Python to use pandas dataframe?如何在 Python 中重构 `with` 语句以使用 pandas 数据框?
【发布时间】:2026-01-16 16:00:02
【问题描述】:

我正在尝试重构以下伪代码逻辑,以使用 pandas 将函数从读取和写入文件全部存储在内存中,但与循环相比,with 函数的操作方式让我感到困惑一个pandasdataframe

这是我要重构的代码:

results = []
with open('data.csv', 'rt') as ins:
    next(ins)  # drop header
    a1, b1, c1 = next(ins).strip().split(',')
    for i, line in enumerate(ins, 2):
        a2, b1, c1 = line.strip().split(',')
        ...
        results.append(dummy_func(a1 b1, c1))
    else:
        results.append(dummy_func(a1 b1, c1))

这是内存中的等价物吗,特别是我不确定with ins 是否是文件中的行,我是否需要两个itertuples,并且在旁注中是itertuples 最好的东西在这里使用,例如比iterrows 更快?

import pandas as pd
df = pd.read_csv('data.csv', sep=',')
results = []
for row in df.itertuples():
    a1, b1, c1 = row.a, row.b, row.c
    for row2 in df.loc[2:].itertuples():
        a1, b1, c1 = row2.a, row2.b, row2.c
        ...
        result.append(dummy_func(a1, b1, c1))
    else: 
        result.append(dummy_func(a1, b1, c1))

【问题讨论】:

  • with... 是用于打开文件的上下文管理器。 Pandas read_csv 内置文件上下文管理,因此无需使用with。除此之外,几乎不可能说出实现目标的最佳方式是什么,因为你还没有描述它。一般来说,几乎没有什么理由需要遍历 pandas 数据框,但这完全取决于上下文。请参阅How to creat good pandas examples 并提供一些示例输入和输出以获得更好的帮助
  • @G.Anderson 非常感谢,请您帮助我理解 read_csv 内置文件上下文管理的含义,或者指向某个地方以获取更多信息?跨度>
  • 你为什么要用低效的 pandas 版本替换你的高效版本?只需使用csv 模块。
  • @juanpa.arrivillaga 这是管道的一部分,我不想继续读写中间文件

标签: python pandas loops with-statement


【解决方案1】:

好吧,我误解了with 的说法,这就是答案

import pandas as pd
df = pd.read_csv('data.csv', sep=',')
results = []
a1, b1, c1 = row.a, row.b, row.c
for row2 in df.loc[1:].itertuples():
    a1, b1, c1 = row2.a, row2.b, row2.c
    ...
    result.append(dummy_func(a1, b1, c1))
else: 
    result.append(dummy_func(a1, b1, c1))

【讨论】: