如何设置日期时间格式以便 Google 表格将该值识别为日期时间

E. *_*aep 5 python dataframe gspread google-sheets-api

我目前正在使用 gspread 将 Google 工作表中的数据检索到 pandas DataFrame 中。为了做到这一点,我只是按照他们的示例https://gspread.readthedocs.io/en/latest/user-guide.html#using-gspread-with-pandas

df = pd.DataFrame(sheet.get_all_records())
df["From"] = pd.to_datetime(df["From"])
df["To"] = pd.to_datetime(df["To"])
Run Code Online (Sandbox Code Playgroud)

它运行良好,但当我想更新电子表格时就会出现问题。

如果我只尝试使用 pandas DataFrame 更新范围:

sheet.update([df.columns.values.tolist()] + df.values.tolist())
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Timestamp 类型的对象不可 JSON 序列化

因此,我相信我需要将时间戳转换回字符串:

df["From"] = df["From"].dt.strftime("%Y-%m-%d %H:%M:%S.%f")
df["To"] = df["To"].dt.strftime("%Y-%m-%d %H:%M:%S.%f")
Run Code Online (Sandbox Code Playgroud)

更新效果很好,但数据没有被识别为时间戳:

在此输入图像描述

有没有办法让 Google 电子表格正确识别日期(即正确的格式是什么)?

Tan*_*ike 14

这个修改怎么样?

从:

df["From"] = df["From"].dt.strftime("%Y-%m-%d %H:%M:%S.%f")
df["To"] = df["To"].dt.strftime("%Y-%m-%d %H:%M:%S.%f")
sheet.update([df.columns.values.tolist()] + df.values.tolist())
Run Code Online (Sandbox Code Playgroud)

到:

df["From"] = df["From"].dt.strftime("%Y-%m-%d %H:%M:%S.%f")
df["To"] = df["To"].dt.strftime("%Y-%m-%d %H:%M:%S.%f")
sheet.update([df.columns.values.tolist()] + df.values.tolist(), value_input_option='USER_ENTERED')
Run Code Online (Sandbox Code Playgroud)

USER_ENTERED:这些值将被解析,就像用户将它们输入到 UI 中一样。数字将保留为数字,但字符串可能会转换为数字、日期等,遵循通过 Google 表格 UI 在单元格中输入文本时应用的相同规则。参考号

在 gspread 中,似乎默认值value_input_optionRAW。这样,单引号就会作为文本值添加到值的顶部。

参考: