pandas Python和GSpread的格式问题

yhuiod9q  于 2023-02-11  发布在  Python
关注(0)|答案(1)|浏览(148)

我有这个Pandas数据框(DF1)。

DF1= DF1.groupby(['Name', 'Type', 'Metric'])
DF1= DF1.first()

如果我输出到df1.to_excel(“output.xlsx”)。格式正确,请参见以下内容:

但是当我用python和GSpread上传到我的谷歌工作表时

from gspread_formatting import *
worksheet5.clear()

set_with_dataframe(worksheet=worksheet1, dataframe=DF1, row=1, include_index=True,
include_column_header=True, resize=True)

这就是输出

我怎样才能像屏幕截图1那样使用gspread_formatting在我的google工作表中保持相同的格式呢?

kd3sttzy

kd3sttzy1#

问题和解决方法:

在当前阶段,似乎包含合并单元格的数据框无法直接放入带有GSpread的电子表格中。所以,在这个答案中,我想提出一个变通方案,这个变通方案的流程如下。
1.准备包含合并像元的数据框。
1.将数据框转换为HTML表。
1.使用Sheets API的batchUpdate方法放置HTML表格。
通过这个流程,可以将值与合并的单元格一起放入电子表格中。当这反映在示例脚本中时,下面的示例脚本如何?

示例脚本:

# This is from your script.
DF1 = DF1.groupby(["Name", "Type", "Metric"])
DF1 = DF1.first()

# I added the below script.
spreadsheetId = "###" # Please set your spreadsheet ID.
sheetName = "Sheet1" # Please set your sheet name you want to put the values.
spreadsheet = client.open_by_key(spreadsheetId)
sheet = spreadsheet.worksheet(sheetName)
body = {
    "requests": [
        {
            "pasteData": {
                "coordinate": {"sheetId": sheet.id},
                "data": DF1.to_html(),
                "html": True,
                "type": "PASTE_NORMAL",
            }
        }
    ]
}
spreadsheet.batch_update(body)
  • 当使用包含合并单元格的样本值运行此脚本时,这些值将通过反映合并单元格而放入电子表格。
  • 如果要清除单元格格式,请修改body,如下所示。
body = {
    "requests": [
        {
            "pasteData": {
                "coordinate": {"sheetId": sheet.id},
                "data": DF1.to_html(),
                "html": True,
                "type": "PASTE_NORMAL",
            }
        },
        {
            "repeatCell": {
                "range": {"sheetId": sheet.id},
                "cell": {},
                "fields": "userEnteredFormat",
            }
        },
    ]
}

参考文献:

相关问题