我正在研究回归分析的结果,并将其推到Google表格中的单元格中(使用gspread)。为此,我需要在Google表格中查询一个范围,然后将各个单元格值设置为数据框中每一列的行。
以下是存储Google表格范围的代码:
worksheet = regression_output_sheet.worksheet("df_full-raw")
# worksheet.range(row_start, column_start, row_end, column_end)
worksheet_range = worksheet.range(1, 1, 500, 3)
print(worksheet_range)
单元格格式:
# worksheet_range format
R = Row
C = Column
'' = Value
<Cell R#C# ''>
# worksheet_range array
[<Cell R1C1 ''>, <Cell R2C1 ''>, ..., <Cell R500C3 ''>]
这是我的数据框:
# df_full data frame
date b_clicks b_cpc
2 2018-01-01 72 2.43
3 2018-01-02 232 2.80
...
325 2018-11-20 162 4.31
[324 rows x 3 columns]
由于worksheet_range数组被行范围和列范围逗号分隔,因此我认为将数据帧值设置为单元格值的最佳方法是遍历所选列的长度(例如本例中为3),设置到一个数组,然后将其馈送到worksheet.range(1,i,500,i)的循环中。从那里,我有一个循环,循环遍历数据帧中的每一列,并将值设置为列表,然后针对worsheet_range中的每一行,将值设置为数据帧列范围中的每一行,然后调用update_cells,但是我不要以为我的循环结构是正确的,因为它使R1C1-R1C500循环了很多次,并将每一列的值设置为这些循环的开始。
这是worksheet_range的期望输出:
[
<Cell R1C1 '2018-01-01'>, <Cell R2C1 '2018-01-02'>,
..., <Cell R1C2 '72'>, <Cell R2C2 '232'>,
..., <Cell R1C3 '2.43'>, <Cell R2C3 '2.80'>,
..., <Cell R500C3 '4.31'>
]
完整代码:
# store count of column names
gs_columns = []
# count columns
for i in range(0,len(columns)):
gs_columns.append(i+1)
print(gs_columns) # [1,2,3]
# for each column, store a worksheet range
for col_val in gs_columns:
worksheet_range = worksheet.range(1, col_val, 500, col_val)
print(type(worksheet_range))
for col_name in columns:
individual_data_frame = df_full[col_name].values.tolist()
print(individual_data_frame)
# for each row in that range, set the row equal to each value in the dataframe column
for row in range(len(worksheet_range)):
worksheet_range[row].value = individual_data_frame[row]
for arr in worksheet_range:
print(arr)
# update cells
worksheet.update_cells(worksheet_range)