You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python为现有DataFrame添加当前日期列

问题描述

我还没完全搞懂DataFrame,正在学习相关课程。想在现有数据输出的旁边添加一列,每个单元格内容都是当前日期。
已经用以下代码获取了时间戳:

time = pd.Timestamp.today()
print(time)

但目前只会打印这个时间戳,不知道怎么把它整合到现有脚本里。之前是把数据输出到Google Sheets后手动添加日期列的,现在希望直接通过脚本完成,让流程更简洁清晰。

现有脚本如下:

import requests
import pandas as pd
import gspread


gc = gspread.service_account(filename='creds.json')
sh = gc.open_by_key('152qSpr-4nK9V5uHOiYOWTWUx4ojjVNZMdSmFYov-n50')
waveData = sh.get_worksheet(1)

id_list = [
    "/Belmar-Surf-Report/3683/",
    "/Manasquan-Surf-Report/386/",
    "/Ocean-Grove-Surf-Report/7945/",
    "/Asbury-Park-Surf-Report/857/",
    "/Avon-Surf-Report/4050/",
    "/Bay-Head-Surf-Report/4951/",
    "/Belmar-Surf-Report/3683/",
    "/Boardwalk-Surf-Report/9183/",
]

res = []
for x in id_list:
    df = pd.read_html(requests.get("http://magicseaweed.com" +
                      x).text)[0]
    values = [[x], df.columns.values.tolist(), *df.values.tolist()] ## 是不是要在这里改?
    res.extend(values)
    res.append([])

waveData.append_rows(res, value_input_option="USER_ENTERED")

我觉得应该修改values相关的代码,但不确定具体怎么改,希望得到详细解释。


解决方案与详细解释

你的思路没错,确实需要在处理values的部分修改,核心是给每一行(站点名称行、表头行、数据行)都追加日期列。下面分步骤说明修改逻辑和完整代码:

1. 提前获取当前日期

先在循环外部获取一次当前日期,避免每次循环重复生成,效率更高。可以根据需求调整日期格式:

# 只保留年月日格式,比如2024-05-20
current_date = pd.Timestamp.today().strftime('%Y-%m-%d')
# 如果需要完整时间戳(包含时分秒),用下面这行
# current_date = pd.Timestamp.today()

2. 给每一行添加日期列

原脚本里的values包含三类行:站点名称行、表头行、DataFrame数据行,需要分别给这三类行追加日期:

  • 站点名称行:原[x]是单列数据,修改为[x, current_date],变成两列(站点+日期)
  • 表头行:在原有表头末尾追加采集日期作为新列的表头
  • 数据行:给DataFrame的每一行数据末尾追加当前日期

方式一:直接处理列表(对应你原脚本的逻辑)

修改循环内的代码:

for x in id_list:
    df = pd.read_html(requests.get("http://magicseaweed.com" + x).text)[0]
    
    # 处理各类行,添加日期列
    site_row = [x, current_date]  # 站点行加日期
    header_row = df.columns.tolist() + ['采集日期']  # 表头加日期列名
    data_rows = [list(row) + [current_date] for row in df.values]  # 每一行数据加日期
    
    values = [site_row, header_row, *data_rows]
    res.extend(values)
    res.append([])  # 保留原有的空行分隔不同站点数据

方式二:用DataFrame自带的列添加方法(更贴合DataFrame学习)

如果你想练习DataFrame的操作,可以先给df直接添加一列,再提取数据:

for x in id_list:
    df = pd.read_html(requests.get("http://magicseaweed.com" + x).text)[0]
    df['采集日期'] = current_date  # 直接给DataFrame新增日期列
    
    site_row = [x, current_date]
    header_row = df.columns.tolist()  # 此时表头已经包含"采集日期"
    data_rows = df.values.tolist()  # 数据行也已经包含日期
    
    values = [site_row, header_row, *data_rows]
    res.extend(values)
    res.append([])

3. 完整修改后的脚本

import requests
import pandas as pd
import gspread


gc = gspread.service_account(filename='creds.json')
sh = gc.open_by_key('152qSpr-4nK9V5uHOiYOWTWUx4ojjVNZMdSmFYov-n50')
waveData = sh.get_worksheet(1)

id_list = [
    "/Belmar-Surf-Report/3683/",
    "/Manasquan-Surf-Report/386/",
    "/Ocean-Grove-Surf-Report/7945/",
    "/Asbury-Park-Surf-Report/857/",
    "/Avon-Surf-Report/4050/",
    "/Bay-Head-Surf-Report/4951/",
    "/Belmar-Surf-Report/3683/",
    "/Boardwalk-Surf-Report/9183/",
]

# 提前获取当前日期,格式可自定义
current_date = pd.Timestamp.today().strftime('%Y-%m-%d')

res = []
for x in id_list:
    df = pd.read_html(requests.get("http://magicseaweed.com" + x).text)[0]
    
    # 方式二:用DataFrame添加列的方式(推荐,更符合DataFrame用法)
    df['采集日期'] = current_date
    
    site_row = [x, current_date]
    header_row = df.columns.tolist()
    data_rows = df.values.tolist()
    
    values = [site_row, header_row, *data_rows]
    res.extend(values)
    res.append([])

waveData.append_rows(res, value_input_option="USER_ENTERED")

关键逻辑解释

  • 提前获取日期:所有站点的数据都是同一时间采集的,一次生成日期即可,避免冗余操作
  • 站点行同步加日期:保证Google Sheets里站点名称和日期列对齐
  • DataFrame添加列:这是DataFrame的基础操作之一,直接给df新增列后,后续提取表头和数据时会自动包含这一列,比手动处理列表更简洁
  • 保留空行分隔:原脚本的res.append([])用来分隔不同站点的数据,修改后保留这个逻辑,让输出到Google Sheets的数据可读性更好

内容的提问来源于stack exchange,提问作者Anthony Madle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 00:01:09