以熊猫数据框的形式读取压缩文件

我试图解压缩一个 csv 文件,并传递到熊猫,这样我就可以工作的文件。
到目前为止,我尝试的代码是:

import requests, zipfile, StringIO
r = requests.get('http://data.octo.dc.gov/feeds/crime_incidents/archive/crime_incidents_2013_CSV.zip')
z = zipfile.ZipFile(StringIO.StringIO(r.content))
crime2013 = pandas.read_csv(z.read('crime_incidents_2013_CSV.csv'))

在最后一行之后,虽然 python 能够获取文件,但是在错误的末尾我得到了一个“ does not alive”。

有人能告诉我哪里做错了吗?

203965 次浏览

我认为你想要 open的 ZipFile,它返回一个类似文件的对象,而不是 read:

In [11]: crime2013 = pd.read_csv(z.open('crime_incidents_2013_CSV.csv'))


In [12]: crime2013
Out[12]:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 24567 entries, 0 to 24566
Data columns (total 15 columns):
CCN                            24567  non-null values
REPORTDATETIME                 24567  non-null values
SHIFT                          24567  non-null values
OFFENSE                        24567  non-null values
METHOD                         24567  non-null values
LASTMODIFIEDDATE               24567  non-null values
BLOCKSITEADDRESS               24567  non-null values
BLOCKXCOORD                    24567  non-null values
BLOCKYCOORD                    24567  non-null values
WARD                           24563  non-null values
ANC                            24567  non-null values
DISTRICT                       24567  non-null values
PSA                            24567  non-null values
NEIGHBORHOODCLUSTER            24263  non-null values
BUSINESSIMPROVEMENTDISTRICT    3613  non-null values
dtypes: float64(4), int64(1), object(10)

如果希望将压缩文件或 tar.gz 文件读入 Pandas 数据框,则 read_csv方法包含这个特定的实现。

df = pd.read_csv('filename.zip')

或者长句:

df = pd.read_csv('filename.zip', compression='zip', header=0, sep=',', quotechar='"')

对来自 医生的压缩参数的描述:

压缩 : {‘推断’,‘ gzip’,‘ bz2’,‘ zip’,‘ xz’,Nothing } ,默认的‘推断’ 用于对磁盘上的数据进行动态解压缩。如果“推断”和 filepath _ or _ buffer 是类路径的,那么检测来自以下扩展名的压缩: ‘。GZ,GZ.Bz2,’。拉上拉链,或者。Xz’(否则没有解压缩)。如果使用“ ZIP”,则 ZIP 文件必须只包含一个要读入的数据文件。设置为无减压。

版本0.18.1中新增: 支持‘ zip’和‘ xz’压缩。

对于“ 什么都没有”文件,您可以使用 import zipfile,您的代码将简单地使用以下代码行:

import zipfile
import pandas as pd
with zipfile.ZipFile("Crime_Incidents_in_2013.zip") as z:
with z.open("Crime_Incidents_in_2013.csv") as f:
train = pd.read_csv(f, header=0, delimiter="\t")
print(train.head())    # print the first 5 rows

结果就是:

X,Y,CCN,REPORT_DAT,SHIFT,METHOD,OFFENSE,BLOCK,XBLOCK,YBLOCK,WARD,ANC,DISTRICT,PSA,NEIGHBORHOOD_CLUSTER,BLOCK_GROUP,CENSUS_TRACT,VOTING_PRECINCT,XCOORD,YCOORD,LATITUDE,LONGITUDE,BID,START_DATE,END_DATE,OBJECTID
0  -77.054968548763071,38.899775938598317,0925135...
1  -76.967309569035052,38.872119553647011,1003352...
2  -76.996184958456539,38.927921847721443,1101010...
3  -76.943077541353617,38.883686046653935,1104551...
4  -76.939209158039446,38.892278093281632,1125028...

看起来你甚至不需要再指定压缩了。下面的代码片段将数据从 filename.zip 加载到 df 中。

import pandas as pd
df = pd.read_csv('filename.zip')

(当然,如果它们与默认值不同,则需要指定分隔符、标题等。)

Https://www.kaggle.com/jboysen/quick-gz-pandas-tutorial

请按此连结。

import pandas as pd
traffic_station_df = pd.read_csv('C:\\Folders\\Jupiter_Feed.txt.gz', compression='gzip',
header=1, sep='\t', quotechar='"')


#traffic_station_df['Address'] = 'address'


#traffic_station_df.append(traffic_station_df)
print(traffic_station_df)

我猜你的眼神是这样的

from io import BytesIO
import requests
import pandas as pd


result = requests.get("https://www.xxx.zzz/file.zip")
df = pd.read_csv(BytesIO(result.content),compression='zip', header=0, sep=',', quotechar='"')

阅读这些文章来理解原因: https://medium.com/dev-bits/ultimate-guide-for-working-with-i-o-streams-and-zip-archives-in-python-3-6f3cf96dca50