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