我正在尝试解压缩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能够获取文件,但在错误结束时我得到“不存在”。
有人可以告诉我我做错了什么吗?
答案 0 :(得分:108)
如果要将zipped或tar.gz文件读入pandas数据帧,read_csv
方法包括此特定实现。
df = pd.read_csv('filename.tar.gz', compression='gzip', header=0, sep=',', quotechar='"')
docs的压缩参数说明:
压缩: {'推断','gzip','bz2','zip','xz',无},默认'推断'
用于磁盘上数据的即时解压缩。如果'推断'和filepath_or_buffer是类似路径的,则从以下扩展中检测压缩:'。gz','。bz2','。zip'或'.xz'(否则无解压缩)。如果使用'zip',ZIP文件必须只包含一个要读入的数据文件。设置为None表示没有解压缩。
('zip'和'xz'压缩版本在0.18.1版本中添加)
答案 1 :(得分:33)
我想你想要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)
答案 2 :(得分:9)
对于&#34; zip &#34;文件,你可以使用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...
答案 3 :(得分:6)
似乎您甚至不必再指定压缩率。以下代码段将filename.zip中的数据加载到df中。
import pandas as pd
df = pd.read_csv('filename.zip')
(当然,如果它们与默认值不同,则需要指定分隔符,标头等。)
答案 4 :(得分:2)
我猜你在看什么
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='"')
答案 5 :(得分:1)
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)