【问题标题】:How to write a pandas.DataFrame to csv file with custom header?如何使用自定义标题将 pandas.DataFrame 写入 csv 文件?
【发布时间】:2019-10-03 14:54:41
【问题描述】:

我有一个数据框

import pandas as pd
df = pd.DataFrame([[1, 2], [3, 4]], columns=['a', 'b'])

我想将 df 写入 csv 文件,但不使用列 ['a', 'b']。第一行是我的自定义字符串,其余的是df.values 的内容。例如:

numrows numcols note
1 2
3 4

我可以使用 pandas 执行此操作,还是必须手动循环内容并写入文件?

【问题讨论】:

  • 您可以在保存之前重命名数据框中的列。
  • 为什么不检查 dataframe.to_csv() 的文档。有选项header - 也许它重命名文件中的标题。
  • @furas 我想写一个自定义字符串,它与数据内容的列数不同。请参阅上面的示例。
  • 再次检查header - 您可以使用与列不同的名称。
  • @furas 标头可以更改值,但列数不能更改。

标签: python pandas csv dataframe


【解决方案1】:

您可以先在第一行使用自定义文本创建一个 csv 文件,然后将数据框追加到它。

with open('file.csv', 'a') as file:
    file.write('Custom String\n')
    df.to_csv(file, header=False, index=False)

另外,请参阅this 帖子。

所以,在你的情况下,就用这个

with open('file.csv', 'a') as file:
    file.write('numrows numcols note\n')
    df.to_csv(file, header=False, index=False)

【讨论】:

  • 这是一个原则性的解决方案,在正确设置写入模式时效果很好。我不确定接受哪个答案。稍后将通过计票接受。
【解决方案2】:

改进@Divyanshu Srivastava answer:

这不是很重要,但不需要保留打开的文件:

with open(file_path, 'w') as f:
     f.write('Custom String\n')

df.to_csv(file_path, header=False, mode="a")

【讨论】:

  • 同理,只是本例文件打开了两次。
  • 是的,只有当您提供文件对象而不是路径时,您才会禁用通用换行符,这在大多数情况下不会改变任何人,但仍然 :)
【解决方案3】:

先写入自定义字符串,然后以追加模式写入所有没有列的数据:

file = 'file.csv'
pd.DataFrame(columns=['numrows numcols note']).to_csv(file, index=False)
df.to_csv(file, header=None, index=False, mode='a')

【讨论】:

  • 第一个自定义字符串不需要创建Dataframe。
  • 仅为标头创建整个数据帧是浪费
  • 我喜欢这个答案,因为它都在熊猫身上,因此它显示了熊猫的力量和局限性。
  • @THN 这个问题从来没有说过需要一个全熊猫的答案。
  • @DivyanshuSrivastava - 首先,它仍然适用于 OP,接受什么答案 :) 所以可以否决,但不确定说服其他人关于您的解决方案的好方法是否是最好的。
猜你喜欢
  • 2018-03-21
  • 2013-04-01
  • 2019-09-18
  • 1970-01-01
  • 2014-11-16
  • 2019-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多