Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-如何在Excel工作表中的特定列中编写_Python_Excel_Pandas - Fatal编程技术网

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

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

我在使用pandas更新Excel工作表时遇到问题,无法在其中写入新值。我已经有了一个从MySheet1.xlsx读取值的现有框架df1。因此,这需要要么是一个新的数据帧,要么以某种方式复制并覆盖现有的数据帧

电子表格采用以下格式:

我有一个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']
如何获得最终结果?谢谢大家!


在我看来,最简单的解决方案是将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')