【问题标题】:Load xlsx file from drive in colaboratory在 colaboratory 中从驱动器加载 xlsx 文件
【发布时间】:2025-12-30 11:20:08
【问题描述】:

如何将 MS-excel(.xlsx) 文件从 google drive 导入 colaboratory?

excel_file = drive.CreateFile({'id':'some id'})

确实有效(drivepydrive.drive.GoogleDrive 对象)。但是,

print excel_file.FetchContent()

返回无。和

excel_file.content()

抛出:

TypeErrorTraceback(最近一次调用最后一次) 在 () ----> 1 excel_file.content()

TypeError: '_io.BytesIO' 对象不可调用

我的意图是(给定一些有效的文件 'id')将它作为 io 对象导入,它可以被 pandas read_excel() 读取,最后从中得到一个 pandas 数据框。

【问题讨论】:

    标签: python excel pandas pydrive google-colaboratory


    【解决方案1】:
    import pandas as pd
    
    xlsx_link = 'https://docs.google.com/spreadsheets/d/1Sv4ib5i7CKWhAHZkKg-uitIkS3xwxtXM/export'
    df = pd.read_excel(xlsx_link)
    

    如果 xlsx 托管在 Google 驱动器上,一旦共享,任何人都可以使用链接访问它,无论是否有 google 帐户。 google.colab.drivegoogle.colab.files 依赖不是必需的

    【讨论】:

      【解决方案2】:

      首先,我从 google.colab

      导入 iopandasfiles
      import io
      import pandas as pd
      from google.colab import files
      

      然后我使用上传小部件上传文件

      uploaded = files.upload()
      

      你会得到类似的东西(点击选择文件并上传 xlsx 文件):

      假设文件名是my_spreadsheet.xlsx,所以需要在下面一行中使用:

      df = pd.read_excel(io.BytesIO(uploaded.get('my_spreadsheet.xlsx')))
      

      就是这样,现在您在 df 数据框中有了第一张工作表。但是,如果您有多个工作表,您可以将代码更改为:

      首先,将 io 调用移动到另一个变量

      xlsx_file = io.BytesIO(uploaded.get('my_spreadsheet.xlsx'))
      

      然后,使用新变量指定工作表名称,如下所示:

      df_first_sheet = pd.read_excel(xlsx_file, 'My First Sheet')
      df_second_sheet = pd.read_excel(xlsx_file, 'My Second Sheet')
      

      【讨论】:

        【解决方案3】:

        也许是更简单的方法:

        #To read/write data from Google Drive:
        #Reference: https://colab.research.google.com/notebooks/io.ipynb#scrollTo=u22w3BFiOveAå
        from google.colab import drive
        drive.mount('/content/drive')
        
        df = pd.read_excel('/content/drive/My Drive/folder_name/file_name.xlsx')
        
        # #When done, 
        # drive.flush_and_unmount()
        # print('All changes made in this colab session should now be visible in Drive.')
        
        

        【讨论】:

          【解决方案4】:

          您需要使用excel_file.GetContentFile 在本地保存文件。然后,您可以在 !pip install -q xlrd 之后使用 Pandas read_excel 方法。

          这是一个完整的例子: https://colab.research.google.com/notebook#fileId=1SU176zTQvhflodEzuiacNrzxFQ6fWeWC

          我做了什么更详细:

          我创建了一个新的spreadsheet in sheets 以导出为 .xlsx 文件。

          接下来,我将其导出为 .xlsx 文件并再次上传到云端硬盘。网址是: https://drive.google.com/open?id=1Sv4ib5i7CKWhAHZkKg-uitIkS3xwxtXM

          记下文件 ID。就我而言,它是1Sv4ib5i7CKWhAHZkKg-uitIkS3xwxtXM

          然后,在 Colab 中,我调整了 Drive download snippet 以下载文件。关键位是:

          file_id = '1Sv4ib5i7CKWhAHZkKg-uitIkS3xwxtXM'
          downloaded = drive.CreateFile({'id': file_id})
          downloaded.GetContentFile('exported.xlsx')
          

          最后,创建一个 Pandas DataFrame:

          !pip install -q xlrd
          import pandas as pd
          df = pd.read_excel('exported.xlsx')
          df
          

          !pip install... 行安装读取 Excel 文件所需的 xlrd 库。

          【讨论】:

          • 由于您已经上传到 Google 云端硬盘并转换为工作表,因此您可以跳过再次上传的步骤,并从 Colab 将其作为工作表访问,如本解决方案中所示:*.com/a/49397059/1762493