Python Pandas - 如何在Excel工作表中的特定列中编写

时间:2018-04-05 20:56:54

标签: python excel pandas

我无法通过在其中编写新值来使用pandas更新Excel Sheet。我已经有一个现有的帧df1,它读取MySheet1.xlsx中的值。所以这需要是一个新的数据帧,或者以某种方式复制和覆盖现有的数据帧。

电子表格采用以下格式:

enter image description here

我有一个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']

如何获得最终结果?谢谢!

enter image description here

2 个答案:

答案 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')

这是此时的预期输出:

Expected Output after first section of code

在第二部分中,我们加载现有的工作簿('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')

这是最后的预期输出:

enter image description here

答案 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);