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

kok*_*dee 6 python excel pandas

我无法通过在其中编写新值来使用pandas更新Excel工作表.我已经有一个现有的帧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']
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

小智 9

在我看来,最简单的解决方案是将 excel 作为熊猫的数据框读取,然后修改它并作为 excel 写出。例如:

注释:

将熊猫导入为 pd。将excel表读入名为pandas的数据框。获取您的数据(可能是列表格式),并将其分配给您想要的列。(只需确保长度相同)。将您的数据框另存为 excel,覆盖旧的 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)
Run Code Online (Sandbox Code Playgroud)

  • 这里需要注意的是,您会丢失您要覆盖的工作表的其他列中可能存在的任何公式。 (3认同)

pat*_*ng1 6

下面我提供了一个完全可重现的示例,说明如何使用pandas和openpyxl模块(链接到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')
Run Code Online (Sandbox Code Playgroud)

这是此时的预期输出:

第一段代码后的预期输出

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

这是最后的预期输出:

在此输入图像描述

  • 因此,对于 `cell = 'C%d' % (index + 2)` 它解析为单元格引用 - 即当索引 = 0 然后 `cell = 'C2'` 时,我认为您不应该更改它。您可以将“ws[cell] = row[0]”更改为“ws[cell] = row['Col_C']”,这样就可以了。希望这能回答您的问题。 (2认同)