Python+Pandas调用Google Sheet API追加数据时如何跳过重复表头
问题原因
你代码中生成提交数据的逻辑df.T.reset_index().T.values.tolist()会自动将DataFrame的列索引(哪怕你设置为空值)转换为第一行数据,每次调用追加接口都会带上这一行,自然会每次都插入空表头行。你给columns设为空的操作没有解决核心逻辑问题。
解决方法
场景1:全程不需要写入表头,只追加数据行
直接修改values的生成逻辑,不用转置和重置索引,直接取DataFrame的原始值即可,修改后的函数代码如下:
def Export_Data_To_Sheets(): response_date = service.spreadsheets().values().append( spreadsheetId=SAMPLE_SPREADSHEET_ID_input, valueInputOption='RAW', range=SAMPLE_RANGE_NAME, body=dict( majorDimension='ROWS', # 直接取df的原始值,不包含列索引 values=df.values.tolist() ) ).execute() print('Sheet successfully Updated')
场景2:首次写入需要带头,后续追加不带头
可以先查询目标表格的已有数据量,判断是否是空表,再决定是否携带表头:
def Export_Data_To_Sheets(): # 先查询已有数据 existing_data = service.spreadsheets().values().get( spreadsheetId=SAMPLE_SPREADSHEET_ID_input, range=SAMPLE_RANGE_NAME ).execute().get('values', []) values = [] # 空表就先加表头,否则只加数据 if len(existing_data) == 0: # 如果你需要自定义表头可以替换这里的列表,不需要的话跳过这步 values.append(['列1', '列2', '列3']) # 追加数据行 values.extend(df.values.tolist()) response_date = service.spreadsheets().values().append( spreadsheetId=SAMPLE_SPREADSHEET_ID_input, valueInputOption='RAW', range=SAMPLE_RANGE_NAME, body=dict( majorDimension='ROWS', values=values ) ).execute() print('Sheet successfully Updated')
注意事项
- 确保每次追加的DataFrame列数和表格已有数据的列数一致,避免出现数据错位
- 如果开启了
insertDataOption='INSERT_ROWS'参数,接口会自动在已有数据下方插入新行,不会覆盖原有内容,可根据自身需求开启
内容的提问来源于stack exchange,提问作者user15887962
相关产品推荐
相关产品推荐

