为了账号安全,请及时绑定邮箱和手机立即绑定

在 Python 中按共同日期加入时间序列(数据框和系列/列表问题)

在 Python 中按共同日期加入时间序列(数据框和系列/列表问题)

白衣染霜花 2022-10-06 15:50:53
菜鸟在这里。请原谅我仍在学习的格式。我正在尝试创建一个包含三列的时间序列(我认为是数据框?)。一个是日期列,下一个是库存列,最后一个是价格列。我已经提取了两个单独的系列(日期和库存;日期和价格),我想合并这两个系列,这样我就可以看到三列而不是两组两列。这是我的代码。import jsonimport numpy as npimport pandas as pdfrom urllib.error import URLError, HTTPErrorfrom urllib.request import urlopenclass 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)  请注意,“mytoken”需要替换为 eia.gov API 密钥。我可以让它成功地创建两个列表的输出......但是为了合并列表,我试图在最后添加这个: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")因为显然我不知道列表和系列之间的区别。如何按日期列合并这些列表?非常感谢您的帮助。(也请随意告诉我为什么我在这篇文章中正确格式化代码很糟糕。)
查看完整描述

1 回答

?
慕标5832272

TA贡献1966条经验 获得超4个赞

如果您想在其余代码中将它们作为 DataFrame 进行操作,您可以将它们转换ngstor为ngpxDataFrame,如下所示:


import pandas as pd

# I create two lists that look like yours

ngstor = [[1,2], ["2020-04-03", "2020-05-07"]]

ngpx = [[3,4] , ["2020-04-03", "2020-05-07"]]

# I transform them to DataFrames

ngstor = pd.DataFrame({"value1": ngstor[0],

                       "date_col": ngstor[1]})

ngpx = pd.DataFrame({"value2": ngpx[0],

                       "date_col": ngpx[1]})


然后您可以使用pandas.merge或pandas.concat:


# merge option

joined_framed = pd.merge(ngstor, ngpx, on="date_col",

                          how="outer")

# concat option

ngstor = ngstor.set_index("date_col")

ngpx = ngpx.set_index("date_col")

joined_framed = pd.concat([ngstor, ngpx], axis=1,

                          join="outer").reset_index()


结果将是:


    date_col  value1  value2

0  2020-04-03       1       3

1  2020-05-07       2       4


查看完整回答
反对 回复 2022-10-06
  • 1 回答
  • 0 关注
  • 135 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信