পান্ডাস ডেটা ফ্রেম হিসাবে একটি জিপ করা ফাইল পড়ুন


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

আপনি যদি পিন্ডাস ডেটাফ্রেমে একটি জিপড বা একটি tar.gz ফাইলটি পড়তে চান তবে read_csvপদ্ধতিগুলিতে এই নির্দিষ্ট প্রয়োগটি অন্তর্ভুক্ত রয়েছে।

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

বা দীর্ঘ ফর্ম:

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

ডক্স থেকে সংকোচনের যুক্তির বিবরণ :

সংক্ষেপণ :-'infer', 'gzip', 'bz2', 'zip', 'xz', কিছুই নয় on, অন-ডিস্ক ডেটার ফ্লাই-ডিসকপ্রেশনের জন্য ডিফল্ট 'ইনফার'। যদি 'ইনফার' এবং ফাইলপথ_অর_বফারটি পথের মতো হয় তবে নিম্নলিখিত এক্সটেনশানগুলি থেকে সংক্ষেপণটি সনাক্ত করুন: '.gz', '.bz2', '.zip', বা '.xz' (অন্যথায় কোনও সংক্ষেপণ নয়)। যদি 'জিপ' ব্যবহার করা হয় তবে জিপ ফাইলটিতে অবশ্যই পড়তে হবে কেবল একটি ডেটা ফাইল।

0.18.1 সংস্করণে নতুন: 'জিপ' এবং 'এক্সজেড' সংক্ষেপণের জন্য সমর্থন।


6
জিপড ফাইলগুলির জন্য সমর্থন নেই, কেবল জিজিপ এবং বিজে 2। এটি বিরক্তিকর, কারণ জিপটি বেশ সাধারণ। আমি ধারণা করি এটি কারণ জিপ ওপেন সোর্স নয়?
টিসি প্রক্টর

24
জিপ এখন
পান্ডাস

1
এই সমাধানগুলি একটি জিপিড ফাইলের জন্য কাজ করে তবে .tar.gz ফাইলগুলির জন্য নয় (পান্ডাস 0.19.2) পান্ডা দ্বারা Tar.gz সমর্থিত নয়! দেখুন: github.com/pandas-dev/pandas/issues/…
সেক্টর

আপনি দয়া করে বলতে পারেন যে ব্যবহারের কোনও বিশেষ কারণ আছে কি না quotechar?
হার্পিস ফ্রি ইঞ্জিনিয়ার

এই উত্তরটি একটি .tar.gzফাইল দেখায় , তবে এটি সম্ভবত কেবল কোনও .gzফাইলের সাথেই কাজ করে ।
উইলিয়াম এন্টারিকেন

41

আমি মনে করি আপনি openজিপফাইলে চান , যা ফাইলের মতো একটি বস্তু ফিরিয়ে দেয় 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))
ব্যবহারকারী3226167

15

দেখে মনে হচ্ছে আপনাকে আর কোনও সংক্ষেপণ নির্দিষ্ট করতে হবে না। নিম্নলিখিত স্নিপেট ফাইলনেস থেকে জিপি থেকে ডেফ লোড করে z

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)

স্ট্যাক ওভারফ্লোতে স্বাগতম! যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কোডের সাথে মন্তব্য হিসাবে বা কীভাবে এবং / অথবা কেন সমস্যার সমাধান করে তা উত্তরের দীর্ঘমেয়াদী মানকে উন্নত করবে সে সম্পর্কিত একটি পৃথক অনুচ্ছেদ হিসাবে অতিরিক্ত প্রসঙ্গ সরবরাহ করে।
সরদার উসামা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.