使用 Python 更新时如何保留 Google Sheets 中的日期格式(gspread 和 pandas)

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

我目前正在处理 Google Sheets 中的数据集,作为数据清理过程的一部分,我正在利用 Python 以及 gspread 和 pandas 等库来删除不必要的列,然后再使用清理后的数据更新电子表格。但是,在执行 Python 脚本后,我遇到了一个问题:尝试使用 Google Sheets 的 QUERY 函数将基于日期格式列的特定数据提取到另一个工作表中似乎失败。看来我的脚本无意中更改了日期列的格式,导致 QUERY 函数无法正确识别日期。这会导致错误,指出“查询已完成,结果为空”。当我手动删除列时不会出现此问题;尽管列格式设置为“自动”,但它仅在运行我的脚本后才出现。

下面是我一直在使用的代码片段:

def load():
    auth.authenticate_user()
    creds, _ = default()
    gc = gspread.authorize(creds)

    wb = gc.open_by_key('key')
    ws = wb.worksheet("worksheet")
    rows = ws.get_all_values()

    df = pd.DataFrame.from_records(rows[1:], columns=rows[0])
    return df

def update(cols):
    base = load()
    base.drop(columns=cols, axis=1, inplace=True)

    new_bs = [base.columns.tolist()] + base.values.tolist()

    auth.authenticate_user()
    creds, _ = default()
    gc = gspread.authorize(creds)
    wb = gc.open_by_key('key')
    ws = wb.worksheet("worksheet")

    ws.clear()

    ws.update('A1', new_bs)

columns_to_remove = ['column1', 'column2', "column3", "column4", "column5"]
update(columns_to_remove)

经过分析,我发现了日期格式的问题。在执行 Python 脚本更新 Google Sheets 工作表后,我注意到日期值前面有一个撇号,将其格式化为文本 ('28/02/2019)。这会阻止 Google 表格将这些条目识别为日期。虽然手动删除前导撇号会将文本转换回日期格式,但这种手动干预效率不是很高。

python pandas datetime google-sheets gspread
1个回答
0
投票

针对您的情况,进行以下修改如何?

来自:

ws.update('A1', new_bs)

致:

ws.update('A1', new_bs, value_input_option=gspread.utils.ValueInputOption.user_entered)

ws.update('A1', new_bs, value_input_option="USER_ENTERED")

参考:

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