Lire un fichier compressé en tant que pandas DataFrame

J’essaye de décompresser un fichier csv et de le transmettre aux pandas pour que je puisse travailler sur le fichier.
Le code que j’ai essayé jusqu’à présent est le suivant:

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

Après la dernière ligne, bien que python soit capable d’obtenir le fichier, j’obtiens un “n’existe pas” à la fin de l’erreur.

Est-ce que quelqu’un peut me dire ce que je fais incorrectement?

Si vous souhaitez lire un fichier compressé ou un fichier tar.gz dans pandas dataframe, les méthodes read_csv incluent cette implémentation particulière.

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

compression: {‘gzip’, ‘bz2’, ‘infer’, None}, par défaut ‘infer’
Pour la décompression à la volée des données sur disque. Si ‘infer’, utilisez alors gzip ou bz2 si filepath_or_buffer est une chaîne se terminant par ‘.gz’ ou ‘.bz2’, respectivement, et aucune décompression. Défini sur Aucun pour aucune décompression.
docs

Je pense que vous voulez open le ZipFile, qui retourne un object de type fichier, plutôt que de read :

 In [11]: crime2013 = pd.read_csv(z.open('crime_incidents_2013_CSV.csv')) In [12]: crime2013 Out[12]:  Int64Index: 24567 ensortinges, 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) 

Pour les fichiers ” zip “, vous pouvez utiliser le import zipfile et votre code fonctionnera simplement avec ces lignes:

 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 

Et le résultat sera:

 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...