在追加模式下使用 to_csv 时,python pandas 新行附加到 csv 中的最后一行

Posted

技术标签:

【中文标题】在追加模式下使用 to_csv 时,python pandas 新行附加到 csv 中的最后一行【英文标题】:python pandas new row attached to last one in csv when using to_csv in append mode 【发布时间】:2017-03-22 18:58:03 【问题描述】:

我正在尝试向 csv 文件中的数据添加新行。在添加数据时,它不是插入到下一行,而是添加到上一行的末尾。我的问题代码目前看起来像:

qlist = list(data)
entries = [response, 0,0,0,0]
df = pd.DataFrame([entries], columns=qlist)
df.to_csv('data.csv', index=False, header=False, mode='a')

运行时,“响应”变量与最后一行的最后一个数据值位于同一位置。如何改为将条目追加到新行中?

【问题讨论】:

dataresponse 是什么对象,它们的结构是什么(即嵌套列表、字典)? 【参考方案1】:

虽然您的代码 sn-p 没有多大意义,但我认为您的问题很有趣。如果我对您的理解正确,您有 (1) 一个现有的 csv 文件,以及 (2) 您想要添加到该 csv 文件的代码 sn-p 的一些输出。但是您的新数据被添加到现有 csv 文件的最后一行,而不是作为新行。

所以你的开始是这样的:

# Old data
col1,col2
1,3
2,4

您的代码会产生一些新数据:

#New Data
5,6 

当你试图将它附加到你的旧数据时,你最终会得到这个

col1,col2
1,3
2,4,5,6

但你想要的是这样的:

col1,col2
1,3
2,4
5,6

如果正确,您应该将现有数据加载到 pandas 数据框中,将数据附加到那里,然后覆盖旧的 csv 文件或生成一个新文件。

如果你有一个包含上面旧数据的 csv 文件,你可以这样做:

# imports
import pandas as pd

# read existing data
df_old = pd.read_csv('C:/old.csv')

# Assign new data to a list.
# Note that the new data is written up as
# a list in the first element of a another list.
# Hence the double brackets.
# This way, the data is added as a row.
# If you use single brackets, pandas interprets
# the data as a column when added to a dataframe.
newData = [[5,6]]

# get column names of your existing data
colNames = df_old.columns

# make dataframe of new data that can be
# easily appended to your old data
df_new = pd.DataFrame(data=newData, columns=colNames)

# concatenate old and new
df_complete = pd.concat([df_old, df_new], axis = 0)

# write your complete dataset to a new csv.
df_complete.to_csv('data_new.csv', index=False)

现在您应该在 csv 文件中得到完整的数据集,如下所示:

col1,col2
1,3
2,4
5,6

希望这会有所帮助。如果没有,请告诉我,我会再看一遍。

【讨论】:

以上是关于在追加模式下使用 to_csv 时,python pandas 新行附加到 csv 中的最后一行的主要内容,如果未能解决你的问题,请参考以下文章

Python3 文件操作

Python3.x 文件操作

python之路 --- python文件模式

Python学习之路5——文件操作

在追加模式下加载使用 numpy.save 保存的数组

Python操作文件