В pandas 0.24 есть новое ключевое слово to_csv
compression='infer'
, которое будет проверять суффикс сохраняемого файла.К сожалению, это не очень хорошо работает с zip-архивами, потому что имя сохраняемого файла используется как имя члена zip-архива.И неясно, как предоставить имена членов архива.Итак, что произойдет, вы получите replace df.csv.zip? [y]es, [n]o, [A]ll, [N]one, [r]ename:
при извлечении и вам останется переименовать членов архива.Это также происходит, когда infer
не используется и вместо него используется имя и метод сжатия zip.
сохранение df.csv со сжатием zip дает df.csv с df.csv в нем - архив не получает суффикс .zip.Может раздражать тот, кто пытается использовать файл.
Сохранение df.csv.zip со сжатием zip дает df.csv.zip с df.csv.zip в качестве имени члена архива.Может быть раздражающим при извлечении, потому что тогда возникает конфликт имен архива / члена.
Тем не менее, zip-архив может быть создан с правильными именами членов архива zip.
import pandas as pd
import zipfile as zf
from pandas.compat import StringIO
print(pd.__version__)
csvdata = StringIO("""index,id1,id2,timestamp,number
465,255,3644,2019-05-02 08:00:20.137000,123123
62,87,912,2019-05-02 5:00:00,435456
""")
# prep dataframe
df = pd.read_csv(csvdata, sep=",")
with zf.ZipFile('archive.zip', 'w') as myziparchive:
myziparchive.writestr('df.csv', df.to_csv())
file archive.zip
archive.zip: Zip archive data, at least v2.0 to extract
Richs-MBP:pandas_examples randrews$ zip --show-files archive.zip
Archive contains:
df.csv
Total 1 entries (119 bytes)
Ивнутри может быть размещено больше, чем на датафрейме.