使用Matplotlib结合Gspread调用谷歌表格时遇API错误及数据拆分绘图求助
问题1:Google Sheets API 400错误排查方案
- 文档类型不符:确认你通过
open_by_key访问的是标准Google Sheets表格,而非Google表单、文档或其他不兼容类型的文件。 - 权限配置问题:检查目标表格的共享设置,确保当前授权账号拥有至少「查看权限」;同时确认Google Cloud Console中,Google Sheets API和Google Drive API已正确启用。
- 密钥/链接错误:核对
open_by_key中的表格密钥是否准确,避免多余字符或拼写错误。
问题2:按0/1列拆分DataFrame并绘图
首先补全数据加载代码(确保列名和数据类型正确):
import gspread import pandas as pd import matplotlib.pyplot as plt from google.colab import auth from google.auth import default auth.authenticate_user() creds, _ = default() gc = gspread.authorize(creds) sh = gc.open_by_key("你的表格密钥") worksheet = sh.worksheet("user06") rows = worksheet.get_all_values() # 用表格第一行作为列名,剩余行作为数据 df = pd.DataFrame(rows[1:], columns=rows[0]) # 将数值列转换为数值类型(非数值列会被忽略) df = df.apply(pd.to_numeric, errors='ignore')
拆分DataFrame
假设用于拆分的列名为flag(替换为你实际的列名):
# 筛选flag为0的行 df_flag0 = df[df['flag'] == 0] # 筛选flag为1的行 df_flag1 = df[df['flag'] == 1]
绘制图表示例
以直方图为例,对比两部分数据的某数值列分布:
# 绘制flag=0的数值列分布 plt.hist(df_flag0['数值列名称'], bins=10, alpha=0.5, label='flag=0') # 绘制flag=1的数值列分布 plt.hist(df_flag1['数值列名称'], bins=10, alpha=0.5, label='flag=1') plt.legend() plt.xlabel('数值') plt.ylabel('频数') plt.title('不同flag值的数值分布') plt.show()
如果需要折线图,可替换为:
plt.plot(df_flag0['X轴列'], df_flag0['Y轴列'], label='flag=0') plt.plot(df_flag1['X轴列'], df_flag1['Y轴列'], label='flag=1') plt.legend() plt.show()
内容的提问来源于stack exchange,提问作者exammuger
相关产品推荐
相关产品推荐

