【发布时间】:2018-06-11 16:49:24
【问题描述】:
我正在将数据解析为列表,并使用 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 并且适用于我的第一个 if-statement for df,但它不适用于我写入文件。
发生的情况是,标题被一遍又一遍地写入 - 不管计数器只为 True 一次这一事实。当我将 header = False 换成 counter 为 True 时,它永远不会写入 header。
我认为这是因为 df 以某种方式连接到标题上,但除此之外我无法弄清楚逻辑错误。
是否有另一种方法也可以将标题写入同一个 CSV 文件一次且仅一次?
【问题讨论】:
-
代码的第一行是 counter = True。你必须确保它在循环之外,否则每次循环都会将计数器设置为 True。
-
是的,这绝对在我没有提到的循环之外。我会更新这个事实。
标签: python pandas csv dataframe header