gpt4 book ai didi

python - 如何根据日期索引连接一系列数据以形成 df 而不会丢失数据

转载 作者:行者123 更新时间:2023-12-01 01:48:23 24 4
gpt4 key购买 nike

我正在尝试将一堆历史定价数据连接到一个数据框中,但我似乎随机删除了部分数据。

这是我正在尝试做的事情:

“v”代表值,浮点类型

系列 1:

       Ticker1
Date1 v1
Date2 v2
Date3 v3
Date4 v4
.
.
.
.
Date100 v5

系列 2:

       Ticker2
Date101 v6
Date102 v7
Date103 v8
Date104 v9
.
.
.
.
Date200 v10

最终期望的 df

       Ticker1        Ticker2
Date1 v1 np.nan
Date2 v2 np.nan
Date3 v3 np.nan
Date4 v4
.
.
Date100 v5
Date101 np.nan v6
Date102 np.nan v7
Date103 np.nan v8
Date104 np.nan v9
.
.
.
.
Date200 np.nan v10

这是我的做法:

data_dict = {}

for ticker in tickers:
try:
data_dict[ticker] = data.DataReader(ticker,'iex',start_date, end_date)
data_dict[ticker] = data_dict[ticker].reset_index()
data_dict[ticker]['date'] = pd.to_datetime(data_dict[ticker]['date'], format="%Y-%m-%d")
data_dict[ticker]['date'] = data_dict[ticker]['date'].dt.date
data_dict[ticker].index = data_dict[ticker]['date']
data_dict[ticker] = data_dict[ticker].drop('date', axis=1)
except:
pass

pricing_df = pd.DataFrame()
volume_df = pd.DataFrame()

for ticker in data_dict.keys():

temp_series = pd.Series(data = data_dict[ticker]['close'].values,
index = data_dict[ticker].index,
name = ticker
)

pricing_df[ticker] = temp_series

temp_series = pd.Series(data = data_dict[ticker]['volume'].values,
index = data_dict[ticker].index,
name = ticker
)

volume_df[ticker] = temp_series

我得到的返回本质上是我想要的,但在数据集的开头截断了任意数量的日期。具体来说,我有一系列日期可以追溯到 2014 年,但是当我进入最终数据集时,但 df 从 2015 年中期开始......

预先感谢您的所有帮助!

最佳答案

方法一:加入:

在您的情况下,我会使用 join ,这很容易允许给定日期在 Ticker1Ticker2 中都有值,不过您仍然必须首先将它们转换为数据帧(如 @dportman 的答案):

pd.DataFrame(series1).join(pd.DataFrame(series2), how='outer')

Ticker1 Ticker2
Date1 v1 NaN
Date100 v5 NaN
Date101 NaN v6
Date102 NaN v7
Date103 NaN v8
Date104 NaN v9
Date2 v2 NaN
Date200 NaN v10
Date3 v3 NaN
Date4 v4 NaN

注意:您可以对 merge 执行相同的操作,但需要添加 left_index=True, right_index=True 参数:

pd.DataFrame(series1).merge(pd.DataFrame(series2), 
left_index=True, right_index=True, how='outer')

方法 2:连接:

您还可以在 2 系列上使用 pd.concat 来获得相同的结果:

pd.concat([series1, series2], axis=1)

Ticker1 Ticker2
Date1 v1 NaN
Date100 v5 NaN
Date101 NaN v6
Date102 NaN v7
Date103 NaN v8
Date104 NaN v9
Date2 v2 NaN
Date200 NaN v10
Date3 v3 NaN
Date4 v4 NaN

按日期时间索引排序:

假设您的日期是实际日期,或者至少是日期字符串,那么您可以按索引排序。例如,如果它看起来像这样:

>>> df
Ticker1 Ticker2
2018-06-25 v1 NaN
2018-06-28 v5 NaN
2018-06-26 NaN v6
2018-07-01 NaN v7
2018-06-24 NaN v8
2018-06-23 NaN v9
2018-06-29 v2 NaN
2018-06-30 NaN v10
2018-06-22 v3 NaN
2018-06-27 v4 NaN

使用df.sort_index():

           Ticker1 Ticker2
2018-06-22 v3 NaN
2018-06-23 NaN v9
2018-06-24 NaN v8
2018-06-25 v1 NaN
2018-06-26 NaN v6
2018-06-27 v4 NaN
2018-06-28 v5 NaN
2018-06-29 v2 NaN
2018-06-30 NaN v10
2018-07-01 NaN v7

关于python - 如何根据日期索引连接一系列数据以形成 df 而不会丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50992034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com