我有一個包含大量顏色編碼行的 Google 表格。我希望基于彩色行創建一個新的 DataFrame。是否可以根據顏色選擇行?或者即使有辦法選擇沒有顏色編碼的行。
在這方面真的找不到任何東西,所以真的不確定這是否可能。
uj5u.com熱心網友回復:
我不知道如何使用 gspread(很可能是不可能的),但它很容易google-api-python-client(這是 gspread 的依賴項)
您需要將includeGridData引數傳遞給spreadsheets().get()方法。這是檔案中稍微修改的示例:
data = (
service.spreadsheets()
.get(
spreadsheetId=spreadsheet_id,
ranges=ranges,
includeGridData=True # important,
fields=",".join([ # specify only required fields to reduce response size
"sheets.data.rowData.values.formattedValue",
"sheets.data.rowData.values.effectiveFormat.backgroundColor",
])
)
.execute()
)
# now you should parse returned JSON according your needs, e.g.:
def parse(data): # data type: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#Spreadsheet
white_color = {"red": 1, "green": 1, "blue": 1}
for grid_data in data["sheets"][0]["data"]:
# grid_data type: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/sheets#GridData
for row_data in row["rowData"]:
cell_data = row_data["values"][0]
# cell_data type: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#CellData
value = cell_data["formattedValue"] # or cell_data["userEnteredValue"]
color = cell_data["effectiveFormat"]["backgroundColor"]
if color != white_color:
yield value
pd.DataFrame({"column": list(parse(data))})
uj5u.com熱心網友回復:
我不得不稍微修改你的答案才能過去 NameError: name 'row' is not defined
data = (
service.spreadsheets()
.get(
spreadsheetId=sheet_id,
ranges=ranges,
includeGridData=True, # important,
fields=",".join([ # specify only required fields to reduce response size
"sheets.data.rowData.values.formattedValue",
#"sheets.data.rowData.values.effectiveFormat.textFormat.strikethrough",
"sheets.data.rowData.values.effectiveFormat.backgroundColor",
])
)
.execute()
)
def parse(data):
white_color = {"red": 1, "green": 1, "blue": 1}
for grid_data in data["sheets"][0]["data"]:
for row_data in grid_data["rowData"]:
cell_data = row_data["values"][0]
value = cell_data["formattedValue"]
color = cell_data["effectiveFormat"]["backgroundColor"]
if color == white_color:
yield value
print(pd.DataFrame({"column": list(parse(data))}))
這幾乎是我需要的。在這個解決方案中只回傳第一列,你如何迭代剩余的列?
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/339475.html
