我无法通过在其中编写新值来使用pandas更新Excel Sheet。我已经有一个现有的帧df1,它读取MySheet1.xlsx中的值。所以这需要是一个新的数据帧,或者以某种方式复制和覆盖现有的数据帧。
电子表格采用以下格式:
我有一个python列表:values_list = [12.34,17.56,12.45]。我的目标是垂直插入Col_C标题下的列表值。它目前正在水平覆盖整个数据帧,而不保留当前值。
df2 = pd.DataFrame({'Col_C': values_list})
writer = pd.ExcelWriter('excelfile.xlsx', engine='xlsxwriter')
df2.to_excel(writer, sheet_name='MySheet1')
workbook = writer.book
worksheet = writer.sheets['MySheet1']
如何获得最终结果?谢谢!
答案 0 :(得分:5)
下面我提供了一个完全可重现的示例,说明如何使用pandas和openpyxl模块(link to Openpyxl Docs)修改现有的.xlsx工作簿。
首先,为了演示目的,我创建了一个名为test.xlsx的工作簿:
from openpyxl import load_workbook
import pandas as pd
writer = pd.ExcelWriter('test.xlsx', engine='openpyxl')
wb = writer.book
df = pd.DataFrame({'Col_A': [1,2,3,4],
'Col_B': [5,6,7,8],
'Col_C': [0,0,0,0],
'Col_D': [13,14,15,16]})
df.to_excel(writer, index=False)
wb.save('test.xlsx')
这是此时的预期输出:
在第二部分中,我们加载现有的工作簿('test.xlsx')并使用不同的数据修改第三列。
from openpyxl import load_workbook
import pandas as pd
df_new = pd.DataFrame({'Col_C': [9, 10, 11, 12]})
wb = load_workbook('test.xlsx')
ws = wb['Sheet1']
for index, row in df_new.iterrows():
cell = 'C%d' % (index + 2)
ws[cell] = row[0]
wb.save('test.xlsx')
这是最后的预期输出:
答案 1 :(得分:2)
在我看来,最简单的解决方案是将excel读作熊猫的数据帧,然后修改它并写成excel。例如:
评论:
将pandas导入为pd。 将excel表读入pandas data-frame中。 获取可能采用列表格式的数据,并将其分配给所需的列。 (只需确保长度相同)。将您的数据框保存为excel,覆盖旧的Excel或创建一个新的。
代码:
import pandas as pd;
ExcelDataInPandasDataFrame = pd.read_excel("./YourExcel.xlsx");
YourDataInAList = [12.34,17.56,12.45];
ExcelDataInPandasDataFrame ["Col_C"] = YourDataInAList ;
ExcelDataInPandasDataFrame .to_excel("./YourNewExcel.xlsx",index=False);