Подтвердить что ты не робот

Прочтите zip файл как pandas DataFrame

Я пытаюсь распаковать файл csv и передать его в pandas, чтобы я мог работать с файлом.
Код, который я пробовал до сих пор:

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 может получить файл, я получаю "не существует" в конце ошибки.

Может кто-нибудь сказать мне, что я делаю неправильно?

4b9b3361

Ответ 1

Если вы хотите прочитать сжатый файл или файл tar.gz в кадр данных pandas, методы read_csv включают эту конкретную реализацию.

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

Или длинная форма:

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

Описание аргумента сжатия из документов:

сжатие: {‘вывод, er gzip,‘ bz2, ‘zip,‘ xz, нет}, по умолчанию ‘вывод Для оперативной распаковки данных на диске. Если ‘infer и filepath_or_buffer подобны пути, то обнаружите сжатие из следующих расширений:‘.gz, ‘.bz2,‘.zip или ‘.xz (в противном случае без декомпрессии). При использовании ‘zip файл ZIP должен содержать только один файл данных для чтения. Установите значение" Нет ", чтобы не было распаковки.

New in version 0.18.1: support for ‘zip и ‘xz compression.

Ответ 2

Я думаю, вы хотите 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)

Ответ 3

Кажется, вам даже не нужно указывать сжатие. следующий фрагмент загружает данные из filename.zip в df.

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

(Конечно, вам нужно будет указать разделитель, заголовок и т.д., если они отличаются от значений по умолчанию.)

Ответ 4

Для файлов zip вы можете использовать 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...