如何将DataFrame转换为xlsx文件而不保存它?

bk_*_*bk_ 4 python excel dataframe pandas python-requests

我正在将 Excel 文件作为 DataFrame 加载,进行一些转换,然后我想将 Excel 文件保存到某个服务器(不是本地)。

目前,我可以采取一种解决方法来实现这一目标:

import pandas as pd
import requests

df = pd.read_excel("file.xlsx")
df = do_some_transformation(df)

# Store DataFrame locally
df.to_excel("outputfile.xlsx")

# re-read locally stored file und upload it
with open("outputfile.xlsx", "rb") as fin:
        requests.put("url/outputfile.xlsx",
                     data=fin.read(),
                     auth=auth,
                     headers={'content-type': 'application/vnd.ms-excel'})
Run Code Online (Sandbox Code Playgroud)

即我将转换后的 DataFrame 保存在本地,然后将本地副本上传到服务器。是否可以将 df 直接转换为 Excel 文件,而无需在本地存储和重新加载?我必须如何修改 requests.put 语句?

在@Aryerez的暗示下,我尝试了

df = pd.read_excel("file.xlsx")
df = do_some_transformation(df)

writer = pd.ExcelWriter("file.xlsx", engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1')

requests.put("url/outputfile.xlsx",
                     data=writer,
                     auth=auth,
                     headers={'content-type': 'application/vnd.ms-excel'}),
                     
Run Code Online (Sandbox Code Playgroud)

这会导致TypeError: '_XlsxWriter' object is not iterable.

如何将 pandas DataFrame 转换为 Excel 文件并将其传递给request.put

小智 9

  • 您只需要返回字节值而不是编写者本身。

  • 并且您不需要实际的文件来写入它,您可以只使用 io.BytesIO() 而不是将其保存到磁盘。

      output = io.BytesIO()
    
      df = pd.read_excel("file.xlsx")
      df = do_some_transformation(df)
    
      writer = pd.ExcelWriter(output, engine='xlsxwriter')
      df.to_excel(writer, sheet_name='Sheet1')
    
      writer.save()
      xlsx_data = output.getvalue()
    
      requests.put("url/outputfile.xlsx",
               data=xlsx_data,
               auth=auth,
               headers={'content-type': 'application/vnd.ms-excel'}),
    
    Run Code Online (Sandbox Code Playgroud)