簡體   English   中英

將壓縮文件作為 Pandas DataFrame 讀取

[英]Read a zipped file as a pandas DataFrame

我正在嘗試解壓縮 csv 文件並將其傳遞給 Pandas,以便我可以處理該文件。
到目前為止我嘗試過的代碼是:

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

在最后一行之后,雖然 python 能夠獲取文件,但在錯誤結束時我得到一個“不存在”。

有人可以告訴我我做錯了什么嗎?

如果要將壓縮文件或 tar.gz 文件讀入read_csv數據幀,則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 文件必須只包含一個要讀入的數據文件。設置為 None 表示不解壓。

0.18.1 新版功能:支持“zip”和“xz”壓縮。

我想你想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)

看來您甚至不必再指定壓縮了。 以下代碼段將 filename.zip 中的數據加載到 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-io-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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM