将熊猫系列或数据帧列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?



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

我正在研究OpenPyXL来保存新数据(必须读取两次文件并不好,但用OpenPyXL处理标题并将其传递给panda对我来说有点混乱(。问题是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")

作为DataFrame:的示例Excel文件

One  Two
0    a    1
1    b    2
2    c    3

据我所知,dataframe_to_rows()适用于整个DataFrame,不允许我传入pandas系列或DataFrame中的一列。这就是为什么上面的代码将整个DataFrame复制到Excel文件的底部,我只想将df["Three"]列插入Excel的C列中,并带有标题。

好吧,我找到了一种方法(如果你问我的话,很难看(,但它有效。

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")

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

相关内容

  • 没有找到相关文章

最新更新