在Python中组合具有不同日期范围的多个列
我有多个具有不同日期范围(开始日期不同)的股票价格数据框作为指数。下面是三个例子在Python中组合具有不同日期范围的多个列,python,dataframe,merge,concatenation,Python,Dataframe,Merge,Concatenation,我有多个具有不同日期范围(开始日期不同)的股票价格数据框作为指数。下面是三个例子 Dataframe #1: Date 12/15/1980 0.3936 12/16/1980 0.3648 12/17/1980 0.3738 12/18/1980 0.3846 12/19/1980 0.4081 ... ... 09/21/2018 151.2600 Dataframe #2: 10/26/1993
Dataframe #1:
Date
12/15/1980 0.3936
12/16/1980 0.3648
12/17/1980 0.3738
12/18/1980 0.3846
12/19/1980 0.4081
... ...
09/21/2018 151.2600
Dataframe #2:
10/26/1993 0.7862
10/28/1993 0.7483
10/29/1993 0.7578
11/01/1993 0.7956
11/02/1993 0.7956
... ...
09/21/2018 51.2000
Dataframe #3:
Date
10/26/1996 0.7862
10/28/1996 0.7483
10/29/1996 0.7578
11/01/1996 0.7956
11/02/1996 0.7956
... ...
09/21/2018 36.5032
我想将这些数据帧组合成一个以日期为索引的表。对于没有特定日期数据的股票,“单元格”将为空
我有几百个这样的数据帧。如果有人能帮我解决这个问题,我将不胜感激 使用:
dflist = [df1, df2, df3 ...]
for df in dflist:
df.index = pd.to_datetime(df.index,errors ='coerce')
df_all = pd.concat([[df1, df2, df3 ..]],axis=1)
另一种解决方案是在concat
之前使用列表理解
创建DatetimeIndex
——然后输出DatetimeIndex
也被排序:
dfs = [df1, df2, df3]
dfs1 = [x.set_index(pd.to_datetime(x.index, format='%m/%d/%Y')) for x in dfs]
df = pd.concat(dfs1, axis=1)
print (df)
a b c
1980-12-15 0.3936 NaN NaN
1980-12-16 0.3648 NaN NaN
1980-12-17 0.3738 NaN NaN
1980-12-18 0.3846 NaN NaN
1980-12-19 0.4081 NaN NaN
1993-10-26 NaN 0.7862 NaN
1993-10-28 NaN 0.7483 NaN
1993-10-29 NaN 0.7578 NaN
1993-11-01 NaN 0.7956 NaN
1993-11-02 NaN 0.7956 NaN
1996-10-26 NaN NaN 0.7862
1996-10-28 NaN NaN 0.7483
1996-10-29 NaN NaN 0.7578
1996-11-01 NaN NaN 0.7956
1996-11-02 NaN NaN 0.7956
2018-09-21 151.2600 51.2000 36.5032
@helloworldlevel-谢谢,很高兴能帮忙。如果适合你,别忘了接受答案!:)
dfs = [df1, df2, df3]
dfs1 = [x.set_index(pd.to_datetime(x.index, format='%m/%d/%Y')) for x in dfs]
df = pd.concat(dfs1, axis=1)
print (df)
a b c
1980-12-15 0.3936 NaN NaN
1980-12-16 0.3648 NaN NaN
1980-12-17 0.3738 NaN NaN
1980-12-18 0.3846 NaN NaN
1980-12-19 0.4081 NaN NaN
1993-10-26 NaN 0.7862 NaN
1993-10-28 NaN 0.7483 NaN
1993-10-29 NaN 0.7578 NaN
1993-11-01 NaN 0.7956 NaN
1993-11-02 NaN 0.7956 NaN
1996-10-26 NaN NaN 0.7862
1996-10-28 NaN NaN 0.7483
1996-10-29 NaN NaN 0.7578
1996-11-01 NaN NaN 0.7956
1996-11-02 NaN NaN 0.7956
2018-09-21 151.2600 51.2000 36.5032