python - 使用 csv.writer.writerow / csv.writer.writerows 添加行正在删除标题/列
问题描述
一直在用 pandas 和 csv 测试一些数据管理技术。我要做的是读取一个 csv 文件,向其中添加一些额外的行,然后以相同的格式再次保存。
我创建了一个形状为 (250, 20) 的数据框,其中包含随机值、日期作为索引、字母作为列,然后将其保存为 csv 文件。最终我尝试的是在现有的 csv 文件下面附加相同的数据框。
def _writeBulk(savefile, data):
df = data.reset_index()
with open(savefile, 'w', newline='') as outfile:
writer = csv.writer(outfile)
writer.writerows(df.to_numpy().tolist())
outfile.close()
def _writeData(savefile, data):
df = data.reset_index()
with open(savefile, 'w', newline='') as outfile:
writer = csv.writer(outfile)
for row in range(df.shape[0]):
writer.writerow(df.iloc[row].tolist())
outfile.close()
编辑后再次读取文件时,我期望的结果是形状为 (500,20) 的数据框。但似乎该文件不再具有标题(列),形状为(499、200)。
我已经搜索了解决方案或解释,但在写行时跳过标题是我最接近实际问题的方法。
任何解释或解决方案将不胜感激。
解决方案
首先,如果您的 .csv 将第一列作为日期(也是索引),则当您将该文件读入 DataFrame 时,您不必使用 .reset_index()
当您将其读取到数据框时,它变为:
如果您只是想附加一个具有相同列数的新 DataFrame Date, A,B,C... 您可以简单地这样做:
source_df = pd.read_csv('initial.csv')
# copy of the same dataframe
# it could be a different df as per your requirement
new_df = source_df.copy()
# appending the 2nd dataframe to the 1st
final_df = source_df.append(new_df)
# writing to .csv
final_df.to_csv('final.csv', index=False)
我们设置 index=False 以避免将 DateFrame 默认索引 (0,1,2,3...) 写入最终的 .csv 文件
您的最终 df 将如下所示:
在 Excel 中查看时:
说了这么多,如果您希望 DataFrame 将日期作为索引,但是当您写入 .csv 时,它应该有列数据,A,B,C,...
做这个:
source_df = pd.read_csv('test.csv')
# copy of the same dataframe
new_df = source_df.copy()
# appending the 2nd dataframe to the 1st
final_df = source_df.append(new_df)
final_df.set_index(['date'], inplace=True)
final_df.to_csv('final.csv')
你会有,df:
在 Excel 中查看时:
推荐阅读
- assembly - arm aarch64 程序集:如何通过 gcc 编译
- typescript - 笑话:在 Promise 中测试递归调用
- javascript - NodeJS:在多个文件上使用 fs.readFile() 搜索特定字符串
- javascript - Hapi v17 - 文件响应的 Joi 模式
- http - NodeMCU 2013 年 1 月 8 日,第一个原因:4,启动模式:(3,6)湿复位问题?
- prolog - 如何在 Prolog 中表达同义词?
- javascript - 通过 - node.js - awilix 模块向从父级扩展的类启动参数
- python - 为什么seaborn有空白情节?
- reactjs - React:在非分层组件之间传递数据?
- asp.net-web-api - Web API 防止刷新令牌泄漏 - 实现