Python Pandas-如何在Excel工作表中的特定列中编写
我在使用pandas更新Excel工作表时遇到问题,无法在其中写入新值。我已经有了一个从MySheet1.xlsx读取值的现有框架df1。因此,这需要要么是一个新的数据帧,要么以某种方式复制并覆盖现有的数据帧 电子表格采用以下格式: 我有一个python列表:values_list=[12.34,17.56,12.45]。我的目标是在Col_C标题下垂直插入列表值。它当前水平覆盖整个数据帧,而不保留当前值Python Pandas-如何在Excel工作表中的特定列中编写,python,excel,pandas,Python,Excel,Pandas,我在使用pandas更新Excel工作表时遇到问题,无法在其中写入新值。我已经有了一个从MySheet1.xlsx读取值的现有框架df1。因此,这需要要么是一个新的数据帧,要么以某种方式复制并覆盖现有的数据帧 电子表格采用以下格式: 我有一个python列表:values_list=[12.34,17.56,12.45]。我的目标是在Col_C标题下垂直插入列表值。它当前水平覆盖整个数据帧,而不保留当前值 df2 = pd.DataFrame({'Col_C': values_list}) w
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']
如何获得最终结果?谢谢大家!
在我看来,最简单的解决方案是将excel作为panda的数据框读取,然后对其进行修改并将其作为excel写出。例如: 评论: 作为pd进口大熊猫。 将excel工作表读入名为的数据框。 获取数据(可以是列表格式),并将其分配给所需的列。(只需确保长度相同)。将数据框另存为excel,覆盖旧的excel或创建新的excel 代码:
下面我提供了一个完全可复制的示例,说明如何使用pandas和openpyxl模块修改现有的.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')
这是最后的预期输出:
感谢您的回复。这对我有用。请详细说明这一行:单元格='C%d'(索引+2)?在我的例子中,我是否可以用实际的头名称替换C?谢谢因此,对于
cell='C%d'(index+2)
它解析为cell引用-即当index=0时,那么cell='C2'
我认为您不应该更改它。您可以将ws[cell]=行[0]
更改为ws[cell]=行['Col_C']]
,这样就可以了。希望这能回答你的问题。谢谢你的解释@patrickjlong1是否有办法在excel工作表中找到您想要阅读的活动单元格?或者在多个excel工作表中查找活动工作表的方法???@Eswar。一个特殊的细胞-我不知道。对于特定行,您可以使用pandas.read_excel()
上的usecols参数按名称或位置选择特定列。回答非常好,pandas清晰简单。谢谢!我肯定发现这种方式比上面的评论更简单,谢谢!此外,如果您有意这样做,则无需使用分号idk。这里的警告是,您将丢失您要覆盖的工作表的其他列中可能存在的任何公式。
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')