基本上,我想用新数据更新工作表,覆盖excel中的现有单元格。两个文件都具有相同的列名(我不想创建新工作簿,也不想添加新列)。
我正在检索我想要的数据:
import pandas as pd
df1 = pd.read_csv
print(df1)
输出(我只是复制并粘贴前5行,总共约500行):
Index Type Stage CDID Period Index Value
0 812008000 6 2 JTV9 201706 121.570
1 812008000 6 2 JTV9 201707 121.913
2 812008000 6 2 JTV9 201708 121.686
3 812008000 6 2 JTV9 201709 119.809
4 812008000 6 2 JTV9 201710 119.841
5 812128000 6 1 K2VA 201706 122.030
现有的excel文件与df1具有相同的列(和行总数),但我只想拥有'索引'列重新填充新值。我们只是说它看起来像这样(即我希望Index的先前值进入相应的列):
Index Type Stage CDID Period Index Value
0 512901100 6 2 JTV9 201706 121.570
1 412602034 6 2 JTV9 201707 121.913
2 612307802 6 2 JTV9 201708 121.686
3 112808360 6 2 JTV9 201709 119.809
4 912233066 6 2 JTV9 201710 119.841
5 312128003 6 1 K2VA 201706 122.030
这里我正在检索excel文件,并尝试覆盖它:
from win32com.client import Dispatch
import os
xl = Dispatch("Excel.Application")
xl.Visible = True
wbs_path = ('folder path')
for wbname in os.listdir(wbs_path):
if not wbname.endswith("file name.xlsx"):
continue
wb = xl.Workbooks.Open(wbs_path + '\\' + wbname)
sh = wb.Worksheets("sheet name")
sh.Range("A1:A456").Value = df1[["Index"]]
wb.Save()
wb.Close()
xl.Quit()
但这并没有做任何事情。 如果我输入字符串,例如:
h.Range("A1:A456").Value = 'o', 'x', 'c'
这在单元格中通过A1到A456(它更新电子表格)重复o,但忽略x和c。我已经尝试将df1转换为列表和numpy数组,但这不起作用。
有没有人知道解决方案或替代解决方法?
答案 0 :(得分:1)
如果数据框的索引相同,则可以使用update()更新列。它可以像这样工作:
df1.update(df2['Index'].to_frame())
注意:可能不需要to frame()
编辑:
由于您尝试更新excel文件而不是数据框,我的答案可能还不够。 对于这部分,我建议将文件加载到数据帧中,更新数据并保存。
df1 = pd.read_excel('file.xlsx', sheet_name='sheet_name')
# do the update
writer = pd.ExcelWriter('file.xlsx')
df1.to_excel(writer,sheet_name='sheet_name', engine='xlsxwriter')
writer.save()