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_csv
的compression
参数,但是存档被覆盖了,只有最后一个数据帧保留在最终存档中。
如果没有别的办法,我会使用临时文件,但我想知道是否有人有想法让 to_csv
和 zipfile
一起工作。
提前致谢!
我会按照以下方式处理
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)
我需要以 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_csv
的compression
参数,但是存档被覆盖了,只有最后一个数据帧保留在最终存档中。
如果没有别的办法,我会使用临时文件,但我想知道是否有人有想法让 to_csv
和 zipfile
一起工作。
提前致谢!
我会按照以下方式处理
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)