这是我感兴趣的一个数据。
http://fenixservices.fao.org/faostat/static/bulkdownloads/Production_Crops_E_All_Data.zip
它由 3 个文件组成:
我想用 pandas 下载 zip 并从 1 个名为 Production_Crops_E_All_Data.csv 的文件创建 DataFrame
import pandas as pd
url="http://fenixservices.fao.org/faostat/static/bulkdownloads/Production_Crops_E_All_Data.zip"
df=pd.read_csv(url)
Pandas 可以下载文件,可以处理 zip 文件,当然也可以处理 csv 文件。但是,如何处理包含多个文件的存档中的 1 个特定文件呢?
现在我收到错误
ValueError: ('在压缩的 zip 文件 %s 中找到多个文件)
这篇文章没有回答我的问题,因为我在 1 个 zip 中有多个文件将压缩文件读取为 pandas DataFrame
从这个链接
try this
from zipfile import ZipFile
import io
from urllib.request import urlopen
import pandas as pd
r = urlopen("http://fenixservices.fao.org/faostat/static/bulkdownloads/Production_Crops_E_All_Data.zip").read()
file = ZipFile(io.BytesIO(r))
data_df = pd.read_csv(file.open("Production_Crops_E_All_Data.csv"), encoding='latin1')
data_df_noflags = pd.read_csv(file.open("Production_Crops_E_All_Data_NOFLAG.csv"), encoding='latin1')
data_df_flags = pd.read_csv(file.open("Production_Crops_E_Flags.csv"), encoding='latin1')
希望这可以帮助!
编辑:将 python3 StringIO 更新为 io.StringIO
编辑:更新了 urllib 的导入,将 StringIO 的用法更改为 BytesIO。另外你的 CSV 文件不是 utf-8 编码,我尝试了 latin1 并且有效。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)