我正在将数据解析为列表并使用 pandas 构建和写入 CSV 文件。首先,我的数据被放入一个集合中,其中 inv 、 name 和 date 都是包含大量条目的列表。然后我使用 concat 通过我解析的数据集将每次迭代连接到 CSV 文件,如下所示:
counter = True
data = {'Invention': inv, 'Inventor': name, 'Date': date}
if counter is True:
df = pd.DataFrame(data)
df = df[['Invetion', 'Inventor', 'Date']]
else:
df = pd.concat([df, pd.DataFrame(data)])
df = df[['Invention', 'Inventor', 'Date']]
with open('./new.csv', 'a', encoding = utf-8) as f:
if counter is True:
df.to_csv(f, index = False, header = True)
else:
df.to_csv(f, index = False, header = False)
counter = False
counter = True 语句位于我正在解析的所有数据的迭代循环 _之外_,因此它不会每次都被覆盖。
所以这意味着它只在我的数据中运行 一次 以获取第一个 df 集,然后将其连接起来。问题是,即使 counter 在第一轮只为 True 并且适用于我的 df 的第一个 _if 语句_,但它不适用于我写入文件。
发生的是标头被一遍又一遍地写入——不管计数器只为真一次的事实。当我将 header = False 交换为 counter 为 True 时,它永远不会写入标题。
我认为这是因为 df 以某种方式连接到标题上,但除此之外我无法弄清楚逻辑错误。
也许有另一种方法我也可以将标题一次且仅一次写入同一个 CSV 文件吗?
原文由 HelloToEarth 发布,翻译遵循 CC BY-SA 4.0 许可协议
如果不查看其余代码,很难判断可能出了什么问题。我开发了一些有效的测试数据和逻辑;你可以调整它以满足你的需要。
请试试这个:
或者,您可以连接循环中的所有数据并在末尾写出数据帧:
如果您的代码无法符合此 API,您可以完全放弃将标头写入 to_csv。您可以检测输出文件是否存在,如果不存在则先将标头写入其中: