【问题标题】:Why Pandas insists on writing to a already filled line in CSV为什么 Pandas 坚持写入 CSV 中已经填满的行
【发布时间】:2021-08-15 00:29:31
【问题描述】:

这是我的 CSV 文件:

name;sex;email
paul;male;paul@gmail.com

然后我尝试将这两个用户添加到 CSV:

import pandas

users = [
    {'name': "john", 'sex' : 'male', 'email' : 'john@gmail.com'},
    {'name': "yoko", 'sex' : 'female', 'email' : 'yoko@gmail.com'}
    ]

df = pd.DataFrame(users)
df.to_csv('users.csv', sep=';', mode='a', header=False, index=False)

但 Pandas 坚持要把 John 的信息写在 Paul 的台词上:

name;sex;email
paul;male;paul@gmail.comjohn;male;john@gmail.com
yoko;female;yoko@gmail.com

这是为什么呢?我们怎样才能给约翰自己的台词?请帮助我们!

【问题讨论】:

  • 看起来您的原始 CSV 缺少最后一行末尾的尾随 \n
  • 你为什么使用熊猫?
  • Pandas 是强制性的,我有一个庞大的数据库。我知道“\n”可以解决问题,但我担心某些开发人员会放弃空行。我想知道是否没有更优雅的解决方案......
  • 您是否尝试将文件读入 DataFrame,然后添加新行,然后写回文件?
  • 看起来你必须继承一个 Pandas 类、DataFrame 或 DataFrameRenderer 或 CSVFormatter 并自己滚动。或者使用换行符创建一个 io.StringIO 对象并将其传递给 to_csv 然后将其写入文件。如果您将 cmets 添加到代码中,并带有关于删除换行符添加的警告,并且 开发人员 仍然没有注意到该警告,那么您的原因就丢失了。

标签: python pandas csv dictionary


【解决方案1】:

您要附加的文件似乎没有以换行符结尾 - 而且 pandas 在开始写入之前也没有插入换行符。

在执行 df.to_csv(...) 之前,您可能可以这样做:

with open('users.csv', 'a') as f:
    f.write('\n')

【讨论】:

  • 是的!这就是我现在使用的技巧......但我想知道是否没有更优雅的解决方案,只使用 Pandas。
猜你喜欢
  • 1970-01-01
  • 2020-10-21
  • 1970-01-01
  • 1970-01-01
  • 2020-08-17
  • 2013-06-06
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多