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