Нуб здесь. ПОЖАЛУЙСТА, ПРОЧИТЕ ФОРМАТИРОВАНИЕ АБСМАЛЬНОГО, поскольку я все еще учусь. Я пытаюсь создать временной ряд (блок данных, я думаю?), Который состоит из трех столбцов. Один - столбец даты, следующий - столбец инвентаря, а последний - столбец цены.
Я вытащил две отдельные серии (дата и инвентарь; дата и цена) и хочу объединить две серии так что я могу видеть три столбца вместо двух наборов из двух. Это мой код.
import json
import numpy as np
import pandas as pd
from urllib.error import URLError, HTTPError
from urllib.request import urlopen
class EIAgov(object):
def __init__(self, token, series):
'''
Purpose:
Initialise the EIAgov class by requesting:
- EIA token
- id code(s) of the series to be downloaded
Parameters:
- token: string
- series: string or list of strings
'''
self.token = token
self.series = series
def __repr__(self):
return str(self.series)
def Raw(self, ser):
# Construct url
url = 'http://api.eia.gov/series/?api_key=' + self.token + '&series_id=' + ser.upper()
try:
# URL request, URL opener, read content
response = urlopen(url);
raw_byte = response.read()
raw_string = str(raw_byte, 'utf-8-sig')
jso = json.loads(raw_string)
return jso
except HTTPError as e:
print('HTTP error type.')
print('Error code: ', e.code)
except URLError as e:
print('URL type error.')
print('Reason: ', e.reason)
def GetData(self):
# Deal with the date series
date_ = self.Raw(self.series[0])
date_series = date_['series'][0]['data']
endi = len(date_series) # or len(date_['series'][0]['data'])
date = []
for i in range (endi):
date.append(date_series[i][0])
# Create dataframe
df = pd.DataFrame(data=date)
df.columns = ['Date']
# Deal with data
lenj = len(self.series)
for j in range (lenj):
data_ = self.Raw(self.series[j])
data_series = data_['series'][0]['data']
data = []
endk = len(date_series)
for k in range (endk):
data.append(data_series[k][1])
df[self.series[j]] = data
return df
if __name__ == '__main__':
tok = 'mytoken'
# Natural Gas - Weekly Storage
#
ngstor = ['NG.NW2_EPG0_SWO_R48_BCF.W'] # w/ several series at a time ['ELEC.REV.AL-ALL.M', 'ELEC.REV.AK-ALL.M', 'ELEC.REV.CA-ALL.M']
stordata = EIAgov(tok, ngstor)
print(stordata.GetData())
# Natural Gas - Weekly Prices
#
ngpx = ['NG.RNGC1.W'] # w/ several series at a time ['ELEC.REV.AL-ALL.M', 'ELEC.REV.AK-ALL.M', 'ELEC.REV.CA-ALL.M']
pxdata = EIAgov(tok, ngpx)
print(pxdata.GetData())
Обратите внимание, что «mytoken» должен быть заменен ключом API eia.gov. Я могу получить это, чтобы успешно создать вывод из двух списков ... но затем, чтобы объединить списки, я попытался добавить это в конце:
joined_frame = pd.concat([ngstor, ngpx], axis = 1, sort=False)
print(joined_frame.GetData())
Но я получаю ошибку
("TypeError: cannot concatenate object of type '<class 'list'>'; only Series and DataFrame objs are valid")
потому что, очевидно, я не знаю разницы между списком и серией.
Как объединить эти списки по столбцу даты? Большое спасибо за любую помощь. (Также не стесняйтесь сообщать, почему я ужасен в правильном форматировании кода в этом посте.)