gpt4 book ai didi

python - 将大文件从 .zip 存档写入 Pandas 数据框

转载 作者:太空宇宙 更新时间:2023-11-04 01:47:10 25 4
gpt4 key购买 nike

这是下载 zip 文件的链接,其中包含英国政府国家统计局发布的 1GB 邮政编码级别数据: https://www.arcgis.com/sharing/rest/content/items/19fac93960554b5e90840505bd73917f/data

有关数据的信息可以在这里找到: http://geoportal.statistics.gov.uk/datasets/19fac93960554b5e90840505bd73917f

我在 Python 的数据科学应用程序中使用了这些数据,并将其加载到 Pandas 数据框中。我已将其集成到一个简单的网页中,并将其部署到云端。我不想在我从 AWS EC2 实例访问的存储库中包含大数据。因此,据我所知,我有两个选择:

1) 将压缩文件包含在存储库中,并将 CSV 文件读入 Pandas 数据框中。

2) 打开 url,在文件中流式传输并在脚本中提取它,然后将 CSV 读入 Pandas 数据帧。

这两种方法的问题是 zip 文件包含我需要的 csv 文件以外的内容,我不确定如何具体访问它。

我考虑的另一种方法是在将其包含在存储库之前只压缩我需要的单个 csv,但这似乎会生成多余的文件:

('Multiple files found in compressed zip file %s', "['NSPCL_AUG19_UK_LU.csv', '__MACOSX/', '__MACOSX/._NSPCL_AUG19_UK_LU.csv']") 

所以我遇到了同样的问题,无法直接指向我需要的文件。

请告诉我什么是最佳实践以及如何将我需要的文件放入 Pandas 数据框中。

最佳答案

您可以执行以下操作来提取主 csv 文件并将其直接加载到数据框中:

from urllib.request import urlopen
import zipfile, io

url = 'https://www.arcgis.com/sharing/rest/content/items/19fac93960554b5e90840505bd73917f/data'

archive = zipfile.ZipFile(io.BytesIO(urlopen(url).read())) # Takes some time

csv_path = 'Data/NSPL_AUG_2019_UK.csv' # The desired csv file in the archive

df = pd.read_csv(io.BytesIO(archive.read(csv_path))) # Takes some time
>>> df
pcd pcd2 pcds ... imd calncv stp
0 AB1 0AA AB1 0AA AB1 0AA ... 6808 S99999999 S99999999
1 AB1 0AB AB1 0AB AB1 0AB ... 6808 S99999999 S99999999
2 AB1 0AD AB1 0AD AB1 0AD ... 6808 S99999999 S99999999
3 AB1 0AE AB1 0AE AB1 0AE ... 5503 S99999999 S99999999
4 AB1 0AF AB1 0AF AB1 0AF ... 6668 S99999999 S99999999
... ... ... ... ... ... ... ...
2632799 ZE3 9JW ZE3 9JW ZE3 9JW ... 4187 S99999999 S99999999
2632800 ZE3 9JX ZE3 9JX ZE3 9JX ... 4187 S99999999 S99999999
2632801 ZE3 9JY ZE3 9JY ZE3 9JY ... 4187 S99999999 S99999999
2632802 ZE3 9JZ ZE3 9JZ ZE3 9JZ ... 4187 S99999999 S99999999
2632803 ZE3 9XP ZE3 9XP ZE3 9XP ... 4187 S99999999 S99999999

[2632804 rows x 41 columns]

现在您可以按照 iliar 的建议将数据框单独存储在压缩文件中:

df.to_pickle('NSPL_AUG_2019_UK.pkl', compression='gzip') # Takes some more time

当我尝试这个时,生成的文件大小约为 69MB,因此将它托管在云中应该没有任何问题。

要再次访问数据框,只需加载 pickled 文件:

>>> df = pd.read_pickle('NSPL_AUG_2019_UK.pkl')
pcd pcd2 pcds ... imd calncv stp
0 AB1 0AA AB1 0AA AB1 0AA ... 6808 S99999999 S99999999
1 AB1 0AB AB1 0AB AB1 0AB ... 6808 S99999999 S99999999
2 AB1 0AD AB1 0AD AB1 0AD ... 6808 S99999999 S99999999
3 AB1 0AE AB1 0AE AB1 0AE ... 5503 S99999999 S99999999
4 AB1 0AF AB1 0AF AB1 0AF ... 6668 S99999999 S99999999
... ... ... ... ... ... ... ...
2632799 ZE3 9JW ZE3 9JW ZE3 9JW ... 4187 S99999999 S99999999
2632800 ZE3 9JX ZE3 9JX ZE3 9JX ... 4187 S99999999 S99999999
2632801 ZE3 9JY ZE3 9JY ZE3 9JY ... 4187 S99999999 S99999999
2632802 ZE3 9JZ ZE3 9JZ ZE3 9JZ ... 4187 S99999999 S99999999
2632803 ZE3 9XP ZE3 9XP ZE3 9XP ... 4187 S99999999 S99999999

[2632804 rows x 41 columns]

关于python - 将大文件从 .zip 存档写入 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58843489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com