我目前正在处理 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 表格将这些条目识别为日期。虽然手动删除前导撇号会将文本转换回日期格式,但这种手动干预效率不是很高。
针对您的情况,进行以下修改如何?
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")