Панды сохраняют CSV ZIP с правильным внутренним именем - PullRequest
0 голосов
/ 03 мая 2019

Я работаю на Pandas 0.23.4.

У меня есть DataFrame с именем df.На нем я призываю:

df.to_csv('name.csv.zip', compression='zip')

Это создает ZIP-файл с именем name.csv.zip.Однако внутри него CSV-файл называется name.csv.zip, а не name.csv.Как я могу это исправить?

1 Ответ

0 голосов
/ 04 мая 2019

В 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)

Ивнутри может быть размещено больше, чем на датафрейме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...