[英]How can I read tar.gz file using pandas read_csv with gzip compression option?
[英]How can I read a tar.gz file directly from a URL into Pandas?
我希望閱讀的數據集以 tar.gz 文件的形式存在於 GitHub 上,每隔幾個小時更新一次。 雖然我總是可以下載這個文件,解壓縮它,然后從 CSV 中讀取,但如果我能及時從這個 URL中直接讀取到 Pandas 數據幀中,那就更好了。
經過一番谷歌搜索,我能夠下載壓縮文件,然后將其作為數據框讀取。
import requests
import tarfile
import pandas as pd
# Download file from GitHub
url = "https://github.com/beoutbreakprepared/nCoV2019/blob/master/latest_data/latestdata.tar.gz?raw=true"
target_path = "latestdata.tar.gz"
response = requests.get(url, stream=True)
if response.status_code == 200:
with open(target_path, "wb") as f:
f.write(response.raw.read())
# Read from downloaded file
with tarfile.open(target_path, "r:*") as tar:
csv_path = tar.getnames()[0]
df = pd.read_csv(tar.extractfile(csv_path), header=0, sep=",")
但是,我想知道是否有一種方法可以直接將文件內容讀入數據框中,而無需先將其保存在本地。 如果我想稍后構建 web 應用程序並且沒有本地計算機,這可能很有用。 任何幫助,將不勝感激! 謝謝!
您可以使用BytesIO
( In-Memory Stream ) 將數據保存在 memory 中,而不是將文件保存到本地計算機。
此外,根據tarfile.open 文檔,如果指定了fileobj
,則將其用作以二進制模式打開的文件 object 的替代名稱。
>>> import tarfile
>>> from io import BytesIO
>>>
>>> import requests
>>> import pandas as pd
>>> url = "https://github.com/beoutbreakprepared/nCoV2019/blob/master/latest_data/latestdata.tar.gz?raw=true"
>>> response = requests.get(url, stream=True)
>>> with tarfile.open(fileobj=BytesIO(response.raw.read()), mode="r:gz") as tar_file:
... for member in tar_file.getmembers():
... f = tar_file.extractfile(member)
... df = pd.read_csv(f)
... print(df)
如果您使用ParData ,這可以非常干凈地完成:
from tempfile import TemporaryDirectory
import pardata
schema = {
'download_url': 'https://github.com/beoutbreakprepared/nCoV2019/blob/master/latest_data/latestdata.tar.gz?raw=true',
'subdatasets': {
'all': {
'path': 'latestdata.csv',
'format': {
'id': 'table/csv'
}
}
}
}
with TemporaryDirectory() as d:
dataset = pardata.dataset.Dataset(schema=schema, data_dir=d)
dataset.download(verify_checksum=False)
my_csv = dataset.load() # my_csv is a pandas.DataFrame object that stores the CSV file
print(my_csv)
免責聲明:我是 ParData 的主要共同維護者。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.