Возникли проблемы с устранением неверных точек данных из данных, удаленных из API - PullRequest
1 голос
/ 30 сентября 2019

Я хотел бы использовать API этого веб-сайта (https://min -api.cryptocompare.com / documents? Key = Historical & cat = dataHistoday ), чтобы получить все дневные исторические OHCLV к дате, когдамонеты были выпущены. Мне удалось получить все данные из API, но так как я установил allData = true, API вернул все данные назад самой ранней временной отметке. Однако, поскольку некоторые монеты не выпущены так рано, есть много недействительных точек данных с ценами, равными0.

Чтобы избавиться от этих точек данных, я попытался использовать циклы for, чтобы проверить набор данных и удалить их со всеми ценами = 0. Кажется, это не работает, кто-нибудь может мне помочь с этим (чтобы включить только точки данных, где цены не равны 0)?

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup
from requests_html import HTMLSession

def historical_OHLCV():
    url = "https://min-api.cryptocompare.com/data/v2/histoday?fsym=SNT&tsym=USD&allData=true"
    page = requests.get(url)
    data = list(page.json()['Data'].values())[3]
    for dic in data:
        exam_frame= list(dic.values())[1:6]
        if all (int(i)==0 for i in exam_frame):
            data.remove(dic)
        else:
            df = pd.DataFrame(data)
            df['timestamp'] = [datetime.datetime.fromtimestamp(d) for d in df.time]
            return df

allData = historical_OHLCV()
RenderJSON(allData)
print (allData)

мой токовый выход выглядит так

1 Ответ

0 голосов
/ 30 сентября 2019

Возможно, ищите столбец, где вы не ожидаете ноль, например, цена закрытия

import requests
import pandas as pd

r = requests.get('https://min-api.cryptocompare.com/data/v2/histoday?fsym=SNT&tsym=USD&allData=true').json()
data = r['Data']['Data']
df = pd.DataFrame([item for item in data if float(item['close'])!=0])
print(df)

Это соответствует использованию volumeto, что может быть более логичным выбором

df = pd.DataFrame([item for item in data if float(item['volumeto'])!=0])
...