当前位置: 首页 > 知识库问答 >
问题:

使用熊猫read_csv压缩

东门俊民
2023-03-14

我试图在pandas中使用read\u csv从FTP服务器读取压缩文件。zip文件只包含一个文件,这是必需的。

这是我的密码:

pd.read_csv('ftp://ftp.fec.gov/FEC/2016/cn16.zip', compression='zip')

我得到这个错误:

AttributeError: addinfourl instance has no attribute 'seek'

我在pandas 18.1和19.0中都遇到了这个错误。我是否遗漏了什么,或者这可能是一个错误?

共有3个答案

乔俊才
2023-03-14
header = {'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:32.0) Gecko/20100101 Firefox/54.0.1',}
remotezip = requests.get(url, headers=header)
root = zipfile.ZipFile(io.BytesIO(remotezip.content))
for name in root.namelist():
            df = pd.read_csv(root.open(name)) 

摘自我自己的博文:不用下载zipfile就可以阅读PythonPandas中的压缩csv文件

孙志
2023-03-14

虽然我不完全确定您为什么会出现错误,但您可以通过使用urllib2打开url并将数据写入内存中的二进制流来绕过它,如图所示。此外,我们必须指定正确的分隔符,否则我们将收到另一个错误。

import io
import urllib2 as urllib
import pandas as pd

r = urllib.urlopen('ftp://ftp.fec.gov/FEC/2016/cn16.zip')
df = pd.read_csv(io.BytesIO(r.read()), compression='zip', sep='|', header=None)

至于错误本身,我认为pandas试图在下载url内容之前在“zip文件”上使用seek(因此它不是真正的zip文件),这将导致该错误。

邵凯定
2023-03-14

熊猫现在支持直接从zip或其他压缩文件加载数据到DataFrame。

压缩:{'infer','gzip','bz2','zip','xz',None},默认值为'infer'

用于实时解压缩磁盘上的数据。如果“推断”和filepath_或_buffer类似于路径,则检测来自以下扩展名的压缩:'。gz'。bz2'。“拉链”或“拉链”。xz'(否则不进行解压缩)。如果使用“zip”,zip文件必须只包含一个要读入的数据文件。设置为“无”表示无解压缩。

版本0.18中的新功能。1:支持“zip”和“xz”压缩。

import pandas as pd

df = pd.read_csv("path_to_file.zip")
# or
df = pd.read_csv("path_to_file.zip", compression="zip")
 类似资料:
  • 我正在读取一个包含多个datetime列的csv文件。我需要在读取文件时设置数据类型,但datetimes似乎是个问题。例如: 运行时出现错误: 不理解数据类型"datetime" 通过pandas在事实之后转换列。to_datetime()不是一个选项,我不知道哪些列将成为datetime对象。这些信息可以更改,并且来自于通知我的数据类型列表的任何信息。 或者,我尝试用numpy.genfrom

  • 问题内容: 我将Python 3.4与IPython结合使用,并具有以下代码。我无法从给定的URL读取csv文件: 我有以下错误 “预期的文件路径名或类似文件的对象,得到了类型” 我怎样才能解决这个问题? 问题答案: 更新资料 现在,您可以从熊猫直接传递URL。 正如错误所暗示的,需要一个类似文件的对象作为第一个参数。 如果要从字符串读取csv,可以使用(Python 3.x)或(Python 2

  • 问题内容: 我在尝试将其读入pandas数据框的文本文件中具有以下格式的文件。 如您所见,输入文件中的浮点后面有 10个 整数。 当我尝试将其读入数据帧时,我没有得到最后的4个整数 如何获得输入文件中显示的完整精度?我有一些矩阵操作需要执行,所以我不能将其转换为字符串。 我发现我必须做一些事情,但是我不确定应该在哪里使用它。 问题答案: 这只是显示问题,请参阅docs: Pandas使用专用的十进

  • 问题内容: 打电话时 我得到: /Users/josh/anaconda/envs/py27/lib/python2.7/site- packages/pandas/io/parsers.py:1130:DtypeWarning:列(4,5,7,16)具有混合类型。在导入时指定dtype选项,或将low_memory = False设置为false。 为什么选项与关联,为什么使它有助于解决此问题?

  • 问题内容: 似乎pandas read_csv 函数仅允许使用单个字符定界符/分隔符。有没有办法允许使用字符串“ * | *”或“ %%”代替? 问题答案: 解决方案是使用read_table而不是read_csv: 因此,我们可以阅读以下内容:

  • 我有一个63 MB的csv文件和患者的血液测试。我无法获得DataFrame。它说: 类型警告:列(5,12,20,21,22,23,24,25,26,30,32,35,36,37,38,39,40,41,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64请在导入时指定dtype选项,或者设置low_memory=Fa