programing

압축된 파일을 Panda DataFrame으로 읽기

powerit 2023. 7. 7. 21:09
반응형

압축된 파일을 Panda DataFrame으로 읽기

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

마지막 줄 이후에 파이썬이 파일을 가져올 수 있지만 오류 끝에 "존재하지 않습니다"라는 메시지가 나타납니다.

제가 뭘 잘못하고 있는지 누가 알려주실 수 있나요?

압축된 파일이나 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', 'None', 기본값인 'infer' 디스크 데이터의 즉각적인 압축 해제를 위해 사용합니다.'infer' 및 filepath_or_buffer가 경로와 유사한 경우 '.gz', '.bz2', '.zip' 또는 '.xz'(그렇지 않으면 압축 해제 없음)의 확장에서 압축을 검색합니다.'zip'을 사용하는 경우 ZIP 파일에는 읽을 데이터 파일이 하나만 포함되어야 합니다.압축을 풀지 않으려면 없음으로 설정합니다.

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

내 생각에 당신은 다음보다 파일과 같은 객체를 반환하는 ZipFile을 원할 것입니다.

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)

압축을 더 이상 지정할 필요가 없는 것 같습니다.다음 코드 조각은 파일 이름에서 데이터를 로드합니다.df에 지퍼를 채웁니다.

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

기본값과 다른 경우 구분자, 머리글 등을 지정해야 합니다.

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

당신의 외모는 다음과 같습니다.

from io import BytesIO
import requests
import pandas as pd

result = requests.get("https://www.xxx.zzz/file.zip")
df = pd.read_csv(BytesIO(result.content),compression='zip', header=0, sep=',', quotechar='"')

다음 기사를 읽고 이유를 알아보십시오. https://medium.com/dev-bits/ultimate-guide-for-working-with-i-o-streams-and-zip-archives-in-python-3-6f3cf96dca50

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)

언급URL : https://stackoverflow.com/questions/18885175/read-a-zipped-file-as-a-pandas-dataframe

반응형