Python 如何基于日期索引连接序列以形成df而不丢失数据

Python 如何基于日期索引连接序列以形成df而不丢失数据,python,performance,pandas,Python,Performance,Pandas,我试图将一组历史定价数据连接到一个数据帧中,但我似乎随机删除了部分数据 以下是我试图做的: “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 最终期

我试图将一组历史定价数据连接到一个数据帧中,但我似乎随机删除了部分数据

以下是我试图做的:

“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年年中开始


提前感谢所有的帮助

您可以将两个系列转换为数据帧,然后使用
df.append()
方法附加两个数据帧:

df1 = pd.DataFrame(series1)
df2 = pd.DataFrame(series2)
result = df1.append(df2)
方法1:加入: 在您的情况下,我将使用
join
,这将很容易允许给定日期在
Ticker1
Ticker2
中都有值,尽管您仍然必须首先将它们转换为数据帧(如@dportman的回答):

注意:您可以对
merge
执行相同的操作,但需要添加
left\u index=True,right\u 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\u index()


谢谢,你知道这可能会发生什么吗?我的猜测是,你可能在两个数据帧中有重复的索引,然后当你附加这些索引时,这些索引只附加一次,而你丢失了另一个实例。也许可以尝试.reset_index(),然后附加数据帧。
>>> 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
           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