将 pandas Series 或 DataFrame 列插入到现有 Excel 文件的第一个空列中 (使用 OpenPyXL?)

问题描述 投票:0回答:1

我正在用Python的pandas库处理Excel文件中的一些数据,并从这些数据中创建了两个新的列。我想把这些列添加到Excel文件本身中现有列的最右边,而不影响已经存在的数据。由于这个原因,我不能使用 pd.to_excel()因为这样会覆盖现有的数据,整个工作表的格式也会丢失。

我正在研究用OpenPyXL来保存新数据(要读两次文件不是很好,但用OpenPyXL处理头文件并把它们传递给pandas对我来说有点乱)。问题是 ws.append() 函数在第一列(A列)的底部插入数据,而我想在第一列(比如说C列和D列)的顶部(第1行)插入数据。理想情况下,这应该从两个 pandas Series 对象(代表新的列)或从我正在工作的整个 pandas DataFrame 中的并列中获取数据。脚本最好能自动找到第一个空单元格,尽管这不是必须的。

有什么想法吗?类似的问题也有人问过 此处但在那里,数据从一个表复制到另一个表,我似乎不能让它为我工作。

示例代码。

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows
df = pd.read_excel("file.xlsx")
# New column:
df["Three"] = df["Two"].apply(lambda x: x**2)
# Saving:
file = load_workbook(filename="file.xlsx")
sheet = file["Sheet1"]
for row in dataframe_to_rows(df["Three"], index=False, header=True):
    sheet.append(row)
file.save("file.xlsx")

Excel文件的例子是一个DataFrame。

   One  Two
0    a    1
1    b    2
2    c    3

据我所知: dataframe_to_rows() 工作于整个DataFrame,而不是让我从DataFrame中传递一个Pandas系列或仅仅一列。这就是为什么上面的代码将整个DataFrame复制到Excel文件的底部,而我只想在这里得到 df["Three"] 列插入到Excel的C列中,并加上页眉。

python python-3.x excel pandas openpyxl
1个回答
0
投票

好吧,我找到了一个方法(如果你问我,相当丑陋),但它的工作原理。

sheet["C"]
for i, val in df["Three"].items():
    sheet["C{}".format(i+2)].value = val
sheet["C1"].value = df.columns[2]
file.save("test.xlsx")

遗憾的是没有办法检测到工作表中的第一个空列。

© www.soinside.com 2019 - 2024. All rights reserved.