Pandas - 在 zip 存档中保存多个 CSV

Pandas - save multiple CSV in a zip archive

我需要以 CSV 格式保存多个数据帧,所有数据都在同一个 zip 文件中。 不做临时文件可以吗?

我尝试使用压缩文件:

with zipfile.ZipFile("archive.zip", "w") as zf:
    with zf.open(f"file1.csv", "w") as buffer:
        data_frame.to_csv(buffer, mode="wb")

这适用于 to_excel 但在 to_csv 时失败,因为 zipfiles 需要二进制数据并且 to_csv 写入字符串,尽管有 mode="wb" 参数:

.../lib/python3.8/site-packages/pandas/io/formats/csvs.py", line 283, in _save_header

writer.writerow(encoded_labels)

.../lib/python3.8/zipfile.py", line 1137, in write

TypeError: a bytes-like object is required, not 'str'

另一方面,我尝试使用to_csvcompression参数,但是存档被覆盖了,只有最后一个数据帧保留在最终存档中。

如果没有别的办法,我会使用临时文件,但我想知道是否有人有想法让 to_csvzipfile 一起工作。

提前致谢!

我会按照以下方式处理

import io
import pandas as pd
df = pd.DataFrame({"x":[1,2,3]})
string_io = io.StringIO()
df.to_csv(string_io)
string_io.seek(0)
df_bytes = string_io.read().encode('utf-8')

因为 df_bytes 是字节,它现在应该可以与 zipfile 一起使用。编辑:在查看 to_csv 帮助后,我找到了更简单的方法,即获得 bytes

import pandas as pd
df = pd.DataFrame({"x":[1,2,3]})
df_bytes = df.to_csv().encode('utf-8')

用于将数据框中的多个 excel 文件保存在一个 zip 文件中

import zipfile
from zipfile import ZipFile
import pandas as pd

df1 = pd.DataFrame({"x":[1,2,3]})
df2 = pd.DataFrame({"y":[4,5,6]})
df3 = pd.DataFrame({"z":[7,8,9]})

with zipfile.ZipFile("rishabh.zip", "w") as zf:
      with zf.open(f"check1.xlsx", "w") as buffer:
         df1.to_excel(buffer,index=False)
      with zf.open(f"check2.xlsx", "w") as buffer:
         df2.to_excel(buffer,index=False)
      with zf.open(f"check3.xlsx", "w") as buffer:
         df3.to_excel(buffer, index=False)