将 pandas.DataFrame 添加到现有 Excel 文件

2024-03-18

我有一个网络抓取工具,可以为本月的抓取创建一个 Excel 文件。我想在每次运行时将今天的刮擦和该月的每次刮擦添加到该文件中作为新工作表。然而,我的问题是,它仅用新工作表覆盖现有工作表,而不是将其添加为单独的新工作表。我尝试使用 xlrd、xlwt、pandas 和 openpyxl 来完成此操作。

对于 Python 来说还是全新的,所以简单性值得赞赏!

下面只是处理写入 Excel 文件的代码。

# My relevant time variables
ts = time.time()
date_time = datetime.datetime.fromtimestamp(ts).strftime('%y-%m-%d %H_%M_%S')
HourMinuteSecond = datetime.datetime.fromtimestamp(ts).strftime('%H_%M_%S')
month = datetime.datetime.now().strftime('%m-%y')

# Creates a writer for this month and year
writer = pd.ExcelWriter(
    'C:\\Users\\G\\Desktop\\KickstarterLinks(%s).xlsx' % (month), 
    engine='xlsxwriter')

# Creates dataframe from my data, d
df = pd.DataFrame(d)

# Writes to the excel file
df.to_excel(writer, sheet_name='%s' % (HourMinuteSecond))
writer.save()

Update:

此功能已添加到熊猫0.24.0 http://pandas.pydata.org/pandas-docs/version/0.24/whatsnew/v0.24.0.html#other-enhancements:

ExcelWriter 现在接受mode作为关键字参数,在使用 openpyxl 引擎时启用附加到现有工作簿(GH3441 https://github.com/pandas-dev/pandas/issues/3441)

以前的版本:

熊猫有一个打开功能请求 https://github.com/pandas-dev/pandas/issues/3441为此。

同时,这里有一个函数添加了一个pandas.DataFrame到现有工作簿:

Code:

def add_frame_to_workbook(filename, tabname, dataframe, timestamp):
    """
    Save a dataframe to a workbook tab with the filename and tabname
    coded to timestamp

    :param filename: filename to create, can use strptime formatting
    :param tabname: tabname to create, can use strptime formatting
    :param dataframe: dataframe to save to workbook
    :param timestamp: timestamp associated with dataframe
    :return: None
    """
    filename = timestamp.strftime(filename)
    sheet_name = timestamp.strftime(tabname)

    # create a writer for this month and year
    writer = pd.ExcelWriter(filename, engine='openpyxl')
    
    try:
        # try to open an existing workbook
        writer.book = load_workbook(filename)
        
        # copy existing sheets
        writer.sheets = dict(
            (ws.title, ws) for ws in writer.book.worksheets)
    except IOError:
        # file does not exist yet, we will create it
        pass

    # write out the new sheet
    dataframe.to_excel(writer, sheet_name=sheet_name)
    
    # save the workbook
    writer.save()

测试代码:

import datetime as dt
import pandas as pd
from openpyxl import load_workbook

data = [x.strip().split() for x in """
                   Date  Close
    2016-10-18T13:44:59  2128.00
    2016-10-18T13:59:59  2128.75
""".split('\n')[1:-1]]
df = pd.DataFrame(data=data[1:], columns=data[0])

name_template = './sample-%m-%y.xlsx'
tab_template = '%d_%H_%M'
now = dt.datetime.now()
in_an_hour = now + dt.timedelta(hours=1)
add_frame_to_workbook(name_template, tab_template, df, now)
add_frame_to_workbook(name_template, tab_template, df, in_an_hour)

(Source https://github.com/pandas-dev/pandas/issues/3441#issuecomment-165611726)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 pandas.DataFrame 添加到现有 Excel 文件 的相关文章

随机推荐

  • 如何在mysql中自定义“show processlist”?

    我想按时间订购 但似乎没有办法做到这一点 mysql gt show processlist Id User Host db Command Time State
  • 具有 n 个元素的数组的子集 javascript

    我正在尝试编写一个函数 它将接受一个数组和 n 作为参数 它将返回包含 n 个元素的数组的所有子集 已经尝试了一些方法 但尚未成功 感谢把它放在这里的人 这个函数太复杂了 不能完成工作 基本上我在这里尝试做的是从 4 元素数组中挑选一个元素
  • 查找Excel工作表中填充内容的范围

    我有一个 Excel 2016Book xlsm 在工作表中testsheet 范围内的单元格A1 Y150填充文本或数字内容 左上角的单元格始终是A1 我正在使用 python v3 xlwings 打开 Excel 文件 import
  • TButton的缺陷

    Delphi XE2 中的 TButton 有一个Style财产 当该属性设置为bsSplitButton然后按钮右侧会显示一个下拉箭头 然而 这个下拉区域有一些不便 很多情况下它太窄了 下拉区域的静态宽度只有11个像素 当鼠标指针悬停在下
  • 如何调整jsf2 primefaces中选项卡的宽度和高度?

    如何调整 jsf 2 primefaces 中选项卡的宽度和高度 另请告诉我如何控制选项卡内的文本 颜色和字体大小 谢谢 PrimeFaces 使用 ThemeRoller CSS 框架 前往jQuery UI ThemeRoller 页面
  • 如何在 Azure VM 中使用公共静态 IP

    在花了几个小时尝试每个相关的 Azure Power Shell 命令来将虚拟公共 IP 分配给 Azure VM 后 我又回到了原点 令人惊奇的是 这样的基本功能在Azure中却无法完成 首先 我保留了一个静态IP 然后创建一个虚拟机 然
  • Swift:“后台会话不支持完成处理程序块。请改为使用代表。

    我是 Swift 新手 因此经验不是很丰富 我不知道为什么这不起作用 我正在尝试下载音乐文件 然后将其发送到 AVAudoPlayer 进行播放 这是代码 IBAction func startDownload sender Any wea
  • PHP 将所有 url 转换为 html 链接 [重复]

    这个问题在这里已经有答案了 可能的重复 将文本中的 URL 替换为 HTML 链接 https stackoverflow com questions 1188129 replace urls in text with html links
  • Python 和 PyQt 中的线程错误

    我注意到当函数setModel http doc trolltech com 4 0 qabstractitemview html setModel在并行线程中执行 我尝试了 threading Timer 或 threading thre
  • 修复对 CherryPy 的 GET 请求中的 404:缺少参数错误

    我正在为服务器端使用 CherryPy 在客户端使用 HTML CSS 和 jQuery 制作一个网页 我还使用 mySQL 数据库 我有一个供用户注册该网站的工作表单 创建用户名和密码 我使用 jQuery 向 CherryPy 发送 A
  • 如果我添加/删除/更新可靠集合的元素,休眠会增加版本吗?

    我正在学习休眠乐观锁机制 但我还没有找到我的问题的答案用户指南 https docs jboss org hibernate orm 6 0 userguide html single Hibernate User Guide html l
  • Powershell 按 [DateTime]::ParseExact 排序对象

    我正在尝试使用 PowerShell 按日期对控制台程序返回的行进行排序 日期的格式为 MM dd yyyy 格式 因此必须将它们转换为 DateTime 对象才能采用可排序的格式 为了解析日期 我使用 dates 10 24 2010 0
  • 控制器的 Angular 中的 Jasmine 测试

    我收到以下错误 TypeError undefined is not a function问题是公共的是模块和工厂 问题出在我的线上 var ctrl controllerConstructor resetPasswordSentScree
  • 有没有办法从 MongoDB 检索没有 _id 字段的数据?

    我在我们的项目中使用 MongoDB 目前正在学习它是如何工作的 当插入记录时 MongoDB自动生成ID 查询数据时 总是返回 id 当我们将 Bson Json 反序列化为 out 对象时 这会产生一个问题 因为我们的类型没有该字段 而
  • 使用 C# 在 asp.net 中排序列表和下拉列表

    我有一个返回排序列表的方法 我想将其数据源到下拉列表 我在用 DropDownList1 DataSource stList DropDownList1 DataValueField stList ContainsValue DropDow
  • Haskell:针对 Hackage 的多个版本的基础测试包

    我正在尝试将我的第一个包上传到 Hackage 耶 但出现以下错误 依赖项 build depends base 未指定版本号的上限 基础 包的每个主要版本都会以各种方式更改 API 并且大多数包都需要进行一些更改才能与其一起编译 推荐的做
  • Flutter更新BottomNavigationBar

    我将 BottomNavigationBar 与 TabController 一起使用 通过单击 BottomNavigationBar 的不同选项卡 TabView 会更改内容 但是 如果我在 TabView 上滑动以切换到另一个视图 选
  • 如何使用 C# xaml 以编程方式设置数据绑定

    如何以编程方式设置 DataContext 并在 C Xaml 中创建数据绑定 给定一个类 class Boat INotifyPropertyChanged public event PropertyChangedEventHandler
  • npm 错误!网络 getaddrinfo ENOTFOUND

    我正进入 状态npm ERR network getaddrinfo ENOTFOUND尝试使用 NPM 安装任何包时出错 我知道有很多关于同一问题的线程 但我找不到任何可以帮助我的线程 我已经设置了代理 我认为这与代理设置不正确 没有使用
  • 将 pandas.DataFrame 添加到现有 Excel 文件

    我有一个网络抓取工具 可以为本月的抓取创建一个 Excel 文件 我想在每次运行时将今天的刮擦和该月的每次刮擦添加到该文件中作为新工作表 然而 我的问题是 它仅用新工作表覆盖现有工作表 而不是将其添加为单独的新工作表 我尝试使用 xlrd