使用 pandas dataframe.to_csv() 时,压缩='zip',它会创建一个 zip 文件,其中包含两个名称完全相同的存档文件
When using pandas dataframe.to_csv(), with compression='zip', it creates a zip file with two archive files with the EXACT same name
我正在尝试将数据框中的 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 文件时(在 whosebug.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: 用户警告:名称重复:'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 行的文件都会失败,而任何少于 175 行的文件都可以正常工作。所以它看起来像是在一定大小后分割文件,但从 docs 来看似乎没有这样的设置。对此的任何帮助将不胜感激。谢谢。
看起来这可能是最近的一个 Pandas 错误。我在 Pandas 1.2.0 中遇到了同样的问题。恢复到 1.1.3(即我之前使用的版本)解决了这个问题。我还没有测试 1.1.4 和 1.1.5。
这似乎是 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)
我正在尝试将数据框中的 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 文件时(在 whosebug.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: 用户警告:名称重复:'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 行的文件都会失败,而任何少于 175 行的文件都可以正常工作。所以它看起来像是在一定大小后分割文件,但从 docs 来看似乎没有这样的设置。对此的任何帮助将不胜感激。谢谢。
看起来这可能是最近的一个 Pandas 错误。我在 Pandas 1.2.0 中遇到了同样的问题。恢复到 1.1.3(即我之前使用的版本)解决了这个问题。我还没有测试 1.1.4 和 1.1.5。
这似乎是 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)