【问题标题】:When using pandas dataframe.to_csv(), with compression='zip', it creates a zip file with two archive files with the EXACT same name使用 pandas dataframe.to_csv() 时,compression='zip',它会创建一个 zip 文件,其中包含两个同名的存档文件
【发布时间】:2021-01-12 18:34:19
【问题描述】:

我正在尝试将 OHLCV(股票定价)数据从数据框中保存到单个压缩 csv 文件中,如下所示。我的测试数据是ohlcvData.csv,我用

将其读入数据框
import pandas as pd

df = pd.read_csv('ohlcvData.csv', header=None, names=['datetime', 'open', 'high', 'low', 'close', 'volume'], index_col='datetime')

当我尝试将它写入这样的 zip 文件时(遵循stackoverflow.com/questions/55134716):

df.to_csv('ohlcvData.zip', header=False, compression=dict(method='zip', archive_name='ohlcv.csv'))

我收到以下警告...

C:\Program Files (x86)\Microsoft Visual Studio\Shared\Python37_64\lib\zipfile.py:1473: UserWarning: Duplicate name: 'ohlcv.csv' return self._open_to_write(zinfo, force_zip64=force_zip64)

生成的 ohlcvData.zip 文件包含两个文件,均名为 ohlcv.csv,每个文件都包含部分结果。

当我尝试将 zip 文件读回数据框时...

dfRead = pd.read_csv(ohlcvData.zip', header=None, names=['datetime', 'open', 'high', 'low', 'close', 'volume'], index_col='datetime')

...我收到以下错误...

 *File "C:\Users\jeffm\AppData\Roaming\Python\Python37\site-packages\pandas\io\common.py", line 618, in get_handle
    "Multiple files found in ZIP file. "
ValueError: Multiple files found in ZIP file. Only one file per ZIP: ['ohlcv.csv', 'ohlcv.csv']*

但是,当我将输入文件中的行数从 200 减少到大约 175 时(对于这个文件结构,我必须根据数据删除多少行略有不同),它可以工作并生成一个 zip 文件,包含一个 csv 文件,可以将其加载回数据帧而不会出错。我尝试了许多不同的文件,具有不同的数据和格式,但我仍然得到相同的结果——任何超过(大约)175 行的文件都会失败,而任何文件更少的文件都可以正常工作。因此,它看起来像是在一定大小后拆分文件,但从docs 来看,似乎没有这样的设置。对此的任何帮助将不胜感激。谢谢。

【问题讨论】:

    标签: pandas dataframe csv duplicates zip


    【解决方案1】:

    这似乎是 1.2.0 中引入的错误,我创建了一个最小的复制示例并发布了一个问题:https://github.com/pandas-dev/pandas/issues/39190

    import pandas as pd
    
    # enough data to cause chunking into multiple files
    n_data = 100000
    df = pd.DataFrame(
        {'name': ["Raphael"]*n_data,
        'mask': ["red"]*n_data,
        'weapon': ["sai"]*n_data,
        }
    )
    
    compression_opts = dict(method='zip', archive_name='out.csv')
    df.to_csv('out.csv.zip', index=False, compression=compression_opts)
    
    # reading back the data produces an error
    r_df = pd.read_csv("out.csv.zip")
    
    # passing in compression_opts doesn't work either
    r_df = pd.read_csv("out.csv.zip", compression=compression_opts)
    

    【讨论】:

    • 谢谢。很高兴知道,所以在他们修复它之前,我想我会先写 csv 文件,用 ZipFile 压缩它,然后再删除它。
    【解决方案2】:

    看起来这可能是最近的 Pandas 错误。我在 Pandas 1.2.0 中遇到了同样的问题。恢复到 1.1.3(即我之前使用的)解决了这个问题。我还没有测试过 1.1.4 和 1.1.5。

    【讨论】:

      猜你喜欢
      • 2017-02-07
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 1970-01-01
      • 2016-03-16
      相关资源
      最近更新 更多