पांडा डेटाफ़्रेम के रूप में ज़िपित फ़ाइल पढ़ें


108

मैं एक सीएसवी फ़ाइल को अनज़िप करने और इसे पांडा में पास करने की कोशिश कर रहा हूं ताकि मैं फ़ाइल पर काम कर सकूं।
अब तक मैंने जो कोड आज़माया है वह है:

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'))

अंतिम पंक्ति के बाद, हालांकि अजगर फ़ाइल प्राप्त करने में सक्षम है, मुझे त्रुटि के अंत में "मौजूद नहीं है"।

क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?

जवाबों:


159

यदि आप पांडा डेटाफ़्रेम में एक ज़िपित या टारगेट फ़ाइल पढ़ना चाहते हैं, तो read_csvविधियों में यह विशेष कार्यान्वयन शामिल है।

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

या लंबा रूप:

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

डॉक्स से संपीड़न तर्क का विवरण :

संपीड़न : { compression infer ’, ip gzip’, 'bz2 ’,' zip’, z xz ’, none}, डिफ़ॉल्ट} infer’ ऑन-द-डिस्क डेटा के ऑन-द-फ्लाई डिकंप्रेसन के लिए। यदि 'अनुमान' और filepath_or_buffer पथ-जैसा है, तो निम्न एक्सटेंशन से संपीड़न का पता लगाएं: '.gz', '.bz2', '.zip', या '.xz' (अन्यथा कोई अपघटन नहीं)। यदि 'zip' का उपयोग किया जाता है, तो ज़िप फ़ाइल में केवल एक डेटा फ़ाइल होनी चाहिए, जिसमें कोई भी अपघटन न हो।

संस्करण 0.18.1 में नया: 'ज़िप' और 'xz' संपीड़न के लिए समर्थन।


6
ज़िपित फ़ाइलों के लिए समर्थन नहीं है, केवल gzip और bz2। यह परेशान है, क्योंकि ज़िप बहुत आम है। मुझे लगता है कि क्योंकि ज़िप खुला स्रोत नहीं है?
टीसी प्रॉक्टर

24
जिप अब पांडा 0.18.1 में समर्थित है
निशांत

1
यह समाधान एक gzipped फ़ाइल के लिए काम करता है, लेकिन .tar.gz फ़ाइलों (पंडों 0.19.2) के लिए नहीं। Tar.gz पंडों द्वारा समर्थित नहीं है! देखें: github.com/pandas-dev/pandas/issues/…
टेक्टर

क्या आप हमें बता सकते हैं कि क्या कोई विशेष कारण है quotechar?
हरपीज फ्री इंजीनियर

यह उत्तर एक .tar.gzफ़ाइल दिखाता है , लेकिन यह केवल एक .gzफ़ाइल के साथ काम करता है ।
विलियम एंट्रीकेन

41

मुझे लगता है कि आप openZipFile को चाहते हैं , जो फ़ाइल-जैसी ऑब्जेक्ट लौटाता है, बजाय 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
नोट: आप पढ़ते समय तारीख कॉलम को पार्स कर सकते हैं:pd.read_csv(z.open('crime_incidents_2013_CSV.csv'), parse_dates=['REPORTDATETIME', 'LASTMODIFIEDDATE'])
एंडी हेडन

पहली फाइल पढ़ने के लिए:pd.read_csv(z.open(z.infolist()[0].filename))
user3226167

15

ऐसा लगता है कि आपको संपीड़न को किसी भी अधिक निर्दिष्ट करने की आवश्यकता नहीं है। निम्न स्निपेट फ़ाइल नाम से डेटा लोड करता है। ज़िप df में।

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

(यदि आपको चूक से अलग हैं, तो निश्चित रूप से आपको विभाजक, हेडर इत्यादि को निर्दिष्ट करना होगा।)


यह शीर्ष उत्तर होना चाहिए, अन्य पुराने हैं।
rjurney

12

" ज़िप " फ़ाइलों के लिए, आप उपयोग कर सकते हैं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...

0

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)

ढेर अतिप्रवाह में आपका स्वागत है! हालांकि यह कोड प्रश्न का उत्तर दे सकता है, अतिरिक्त संदर्भ प्रदान करता है या तो कोड के साथ टिप्पणी के रूप में या कैसे और / या क्यों समस्या हल करता है के बारे में एक अलग पैराग्राफ के रूप में उत्तर के दीर्घकालिक मूल्य में सुधार करेगा।
सरदार उस्मा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.