python - 将数据从 python 数据框导出到 googlesheets
问题描述
我正在尝试将 python pandas 数据框导出到 google 工作表中,但出现在单元格中的值都以撇号 (') 开头。有没有办法让我格式化这些值,这样输出就会是一个正常的数字,而无需手动格式化谷歌表格上的数字?我正在使用 df2gspread 将我的数据上传到谷歌表格。我假设这是因为数字被读取为 str,但我对所有数值都做了 pd.to_numeric,所以我认为它会解决但没有。关于我应该如何处理/解决这个问题的任何想法?
import gspread
from df2gspread import df2gspread as d2g
from oauth2client.service_account import ServiceAccountCredentials
import pandas as pd
import numpy as np
scope = ['https://spreadsheets.google.com/feeds',
'https://www.googleapis.com/auth/drive']
#service_account from Google API.
credentials = ServiceAccountCredentials.from_json_keyfile_name(
"service_account.json", scope)
gc = gspread.authorize(credentials)
wks = gc.open("Two").sheet1
data = wks.get_all_values()
headers = data.pop(0)
ssid = 'insert-ssid'
wks_name = 'Transform'
wks_name1 = 'Summary'
cell_of_start_df = 'B2'
pd.set_option('display.max_rows', 300)
pd.set_option('display.max_columns', 500)
pd.set_option('display.width', 1000)
df = pd.DataFrame(data, columns=headers)
df2 = ...
d2g.upload(df,
ssid,
wks_name,
credentials = credentials,
col_names = True,
row_names = True,
start_cell = cell_of_start_df,
clean = True)
d2g.upload(df2,
ssid,
wks_name1,
credentials = credentials,
col_names = True,
row_names = True,
start_cell = cell_of_start_df,
clean = True)
我得到 AttributeError: 'str' object has no attribute 'values_update' 使用更新方法时
values = [df.columns.values.tolist()]
values.extend(df.values.tolist())
wks_name.values_update('Transform', params={'valueInputOption': 'USER_ENTERED'}, body={'values': values})
values2 = [df2.columns.values.tolist()]
values2.extend(df2.values2.tolist())
wks_name1.values_update('Summary', params={'valueInputOption': 'USER_ENTERED'}, body={'values': values})
我的错误发生在 wks_name.values_update 行中,说“str”没有属性“值更新”。我尝试过更改可能的变量,但似乎我遗漏了一些东西。
解决方案
修改点:
在您的脚本中,似乎
wks_name
和wks_name1
是字符串值。我认为这是您的问题的原因。在gspread,似乎
values_update
是gspread.models.Spreadsheet类的方法。关于您的附加脚本,
values = [df.columns.values.tolist()] values.extend(df.values.tolist()) wks_name.values_update('Transform', params={'valueInputOption': 'USER_ENTERED'}, body={'values': values}) values2 = [df2.columns.values.tolist()] values2.extend(df2.values2.tolist()) wks_name1.values_update('Summary', params={'valueInputOption': 'USER_ENTERED'}, body={'values': values})
- 我认为可以使用第一部分。但是关于第二部分,虽然我不确定 ,但
df2
我认为df2.values2.tolist()
和{'values': values}
可能分别是df2.values.tolist()
和{'values': values2}
。
- 我认为可以使用第一部分。但是关于第二部分,虽然我不确定 ,但
当以上几点反映到您的脚本时,它变成如下。
修改后的脚本:
df = ...
df2 = ...
gc = gspread.authorize(credentials)
wks = gc.open("Two")
values = [df.columns.values.tolist()]
values.extend(df.values.tolist())
wks.values_update('Transform', params={'valueInputOption': 'USER_ENTERED'}, body={'values': values})
values2 = [df2.columns.values.tolist()]
values2.extend(df2.values.tolist())
wks.values_update('Summary', params={'valueInputOption': 'USER_ENTERED'}, body={'values': values2})
- 在这里,
'valueInputOption': 'USER_ENTERED'
被使用。
参考:
推荐阅读
- python - 使用 CSS 选择器下载背景图片 - Selenium Python
- ios - 在 socket.io 中使用房间或迭代连接的用户?
- css - 如何使Angular属性指令一次仅应用于一个DOM元素
- javascript - 如何在angular 8 / javascript中填充字符串变量中的变量值
- arrays - 如何使用“reads”子句读取 Dafny 中的序列数组?
- ios - 在 SwiftUI 列表中呈现来自 Realm 的数据的正确方法是什么
- python - 尝试向 selenium 添加扩展时,我得到“参数‘self’未填充。”
- python - 如何为在 pygame 中创建的这个游戏的攻击设置动画?
- python - 定期打勾标签
- connection - IBM Integration Bus SOAP 服务调用错误