将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)
Posted
技术标签:
【中文标题】将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)【英文标题】:Insert pandas Series or DataFrame column into existing Excel file's first empty column (with OpenPyXL?) 【发布时间】:2020-07-21 19:30:53 【问题描述】:我正在使用 Python 的 pandas 库处理 Excel 文件中的一些数据,并从这些数据中创建两个新列。我想在 Excel 文件本身的现有列的最右侧添加这些列,而不会弄乱已经存在的数据。由于这个原因,我不能使用pd.to_excel()
,因为这会覆盖现有数据并且整个工作表都会失去其格式。
我正在研究 OpenPyXL 以保存新数据(不必两次读取文件并不好,但使用 OpenPyXL 处理标头并将它们传递给 pandas 对我来说看起来有点混乱)。问题是ws.append()
函数在第一列(A 列)的底部插入数据,我想在第一个可用的空闲列的顶部(第 1 行)执行此操作(例如列 C 和 D )。理想情况下,这应该从两个 pandas Series 对象(代表新列)或我正在处理的整个 pandas DataFrame 的连接列中获取数据。并且最好脚本应该自动找到第一个空单元格,尽管这不是强制性的。
有什么想法吗? here 有人问过类似的问题,但是数据从一张纸复制到另一张纸,我似乎无法让它为我工作。
示例代码:
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 Series 或 DataFrame 中的一列。这就是为什么上面的代码将整个 DataFrame 复制到 Excel 文件的底部,我只想将 df["Three"]
列插入 Excel 的 C 列,并带有标题。
【问题讨论】:
【参考方案1】:好的,我找到了一种方法(如果你问我,这很丑),但它有效。
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")
遗憾的是无法检测工作表中的第一个空列。
【讨论】:
以上是关于将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)的主要内容,如果未能解决你的问题,请参考以下文章
将多个过滤器应用于 pandas DataFrame 或 Series 的有效方法
将 pandas Series 或 DataFrame 列插入现有 Excel 文件的第一个空列(使用 OpenPyXL?)