pandas如何在已有excel的sheet里完全覆盖地写入数据?pandas如何删除excel里的一行数据?

在使用pandas进行文件写入时,如果原来sheet已有数据,则新写入数据在原来数据上进行不删除地复写。比如说原来有4行数据,我想删掉一行,read为dataframe后drop掉一行,得到3行新的数据,再次to_excel后只覆盖了前3行,表格中的第4行还在。
怎样才能够真正地删除掉excel中的一行使得行数-1?
我删掉0行后写入第123行,原来第3行还在。
clipboard.png

以下是我的代码(参照了stackoverflow上“对一个sheet写入而不影响其他sheeets的方法”).

# 读取后drop
data = pd.read_excel("data.xlsx", sheetname=sheet_name)
mydata = data.drop([0], axis=0)
# 保存新的数据
book = load_workbook('data.xlsx')
writer = pd.ExcelWriter('data.xlsx',engine='openpyxl')
writer.book = book
writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
mydata.to_excel(writer, "mysheet")
writer.save()
阅读 20.5k
2 个回答

如果要全部覆盖的话, 可以把原来的数据全部清除, 然后把新数据写入.
具体代码:

# 读取后drop
data = pd.read_excel("data.xlsx", sheet_name=sheet_name)
mydata = data.drop([0], axis=0)
# 保存新的数据
book = load_workbook('data.xlsx')
writer = pd.ExcelWriter('data.xlsx',engine='openpyxl')
writer.book = book
# 清除原来的数据
idx = book.sheetnames.index('mysheet')
book.remove(book.worksheets[idx])
book.create_sheet('mysheet', idx)

writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
mydata.to_excel(writer, “mysheet”)
writer.save()

参考:How to clear a range of values in an Excel workbook using OpenPyXl
注意, 这样会把原来mysheet的所有其它数据清除!

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题