pandas DataFrame으로 압축 된 파일 읽기


108

csv 파일의 압축을 풀고 팬더에 전달하여 파일 작업을 수행하려고합니다.
지금까지 시도한 코드는 다음과 같습니다.

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 파일을 pandas 데이터 프레임으로 읽으려면 read_csv메서드에이 특정 구현이 포함됩니다.

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

또는 긴 형식 :

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

문서 의 압축 인수에 대한 설명 :

compression : { 'infer', 'gzip', 'bz2', 'zip', 'xz', None}, 기본값 'infer'온 디스크 데이터의 즉석 압축 해제 용. 'infer'및 filepath_or_buffer가 경로와 유사한 경우 '.gz', '.bz2', '.zip'또는 '.xz'(그렇지 않으면 압축 해제 없음) 확장자에서 압축을 감지합니다. 'zip'을 사용하는 경우 ZIP 파일에는 읽을 데이터 파일이 하나만 있어야합니다. 압축을 풀지 않으려면 없음으로 설정하십시오.

버전 0.18.1의 새로운 기능 : 'zip'및 'xz'압축 지원.


6
압축 파일은 지원하지 않으며 gzip 및 bz2 만 지원합니다. zip이 매우 일반적이기 때문에 이것은 짜증 스럽습니다. zip이 오픈 소스가 아니기 때문이라고 생각합니다.
TC Proctor

24
zip은 이제 Pandas 0.18.1에서 지원됩니다
nishant

1
이 솔루션은 gzipped 파일에는 작동하지만 .tar.gz 파일에는 작동하지 않습니다 (Pandas 0.19.2) Tar.gz는 Pandas에서 지원하지 않습니다! 참조 : github.com/pandas-dev/pandas/issues/...
tector

특별한 이유가 있는지 알려주세요 quotechar.
Herpes Free Engineer

이 답변은 .tar.gz파일을 보여 주지만 아마도 .gz파일 에서만 작동 합니다.
William Entriken

41

나는 당신이 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
참고 : 읽기 날짜 열을 구문 분석 할 수 있습니다 :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

더 이상 압축을 지정할 필요가없는 것 같습니다. 다음 스 니펫은 filename.zip의 데이터를 df로로드합니다.

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

(물론 구분자, 헤더 등이 기본값과 다른 경우 지정해야합니다.)


이것은 최고의 답변이어야하며 다른 답변은 구식입니다.
rjurney

12

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

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)

Stack Overflow에 오신 것을 환영합니다! 이 코드는 질문에 답할 수 있지만 코드에 주석으로 추가 컨텍스트를 제공하거나 문제를 해결하는 방법 및 / 또는 이유에 대한 별도의 단락으로 답변의 장기적인 가치를 향상시킬 수 있습니다.
Sardar Usama
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.