Python3:尝试将具有不同日期时间索引列类型的两个数据帧时间序列串联起来

时间:2019-07-17 20:00:00

标签: python dataframe datetime indexing concatenation

问题摘要: 两个数据框的索引列具有不同的类型,而python不知道如何将两者串联。

免责声明: 我是python的初学者。

嗨,

我想连接来自两个不同数据提供者的2个数据帧 df_1:Alpha Vantage和 df_2:Quandl。

df_1看起来像:

                 PG    ^GSPC
2000-01-03  32.0022  1455.22
2000-01-04  31.3753  1399.42
2000-01-05  31.1066  1402.11
2000-01-06  32.2112  1403.45
2000-01-07  34.7785  1441.47
[...]
2019-07-11  114.38  2999.9099
2019-07-12  114.99  3013.7700
2019-07-15  115.48  3014.3000
2019-07-16  115.89  3004.0400
2019-07-17  115.74  2992.0200

df_2看起来像:

            10 YR
Date             
1990-01-02   7.94
1990-01-03   7.99
1990-01-04   7.98
1990-01-05   7.99
1990-01-08   8.02
[...]
2019-07-10   2.07
2019-07-11   2.13
2019-07-12   2.12
2019-07-15   2.09
2019-07-16   2.13

但是,当我使用此连接时

xyz = pd.concat((df_1 , df_2 ), axis=1, sort = False)

我得到一个看起来像这样的数据框:

                 PG         ^GSPC     10 YR
2000-01-03      32.0022     1455.2200   NaN
2000-01-04      31.3753     1399.4200   NaN
2000-01-05      31.1066     1402.1100   NaN
2000-01-06      32.2112     1403.4500   NaN
2000-01-07      34.7785     1441.4700   NaN
2000-01-10      34.5994     1457.6000   NaN
2000-01-11      35.1666     1438.5601   NaN
2000-01-12      34.9278     1432.2500   NaN
2000-01-13      34.3307     1449.6801   NaN
2000-01-14      34.9278     1465.1500   NaN
2000-01-18      34.8979     1455.1400   NaN
[...]
2019-07-05 00:00:00     NaN         NaN     2.04
2019-07-08 00:00:00     NaN         NaN     2.05
2019-07-09 00:00:00     NaN         NaN     2.07
2019-07-10 00:00:00     NaN         NaN     2.07
2019-07-11 00:00:00     NaN         NaN     2.13
2019-07-12 00:00:00     NaN         NaN     2.12
2019-07-15 00:00:00     NaN         NaN     2.09
2019-07-16 00:00:00     NaN         NaN     2.13

因此,这两个数据框的索引列具有不同的类型,并且python不知道如何将两者串联,而是将它们彼此堆叠在一起。我的问题是,如何更改索引列的类型,以便python可以正确连接?

注意:

i)我先前将两个数据帧中的df_1串联在一起,没有问题:

df_1 = pd.concat([stock['5. adjusted close'], indx['5. adjusted close']], axis = 1, sort = False)
df_1 .columns = [userin_stock, userin_indx]     # Renaming columns
df_1 = df_1 [np.isfinite(df_1 [userin_indx])]  # Checking for NaN values and dropping those rows

ii)我使用此命令将df_2从系列转换为数据框

df_2 = pd.DataFrame([df_2 ])

<class 'pandas.core.series.Series'>
<class 'pandas.core.frame.DataFrame'>

iii)df_2已更改 以前,我尝试将日期时间频率从T更改为D,我认为可以解决此问题。但是,一旦我建立联系,便会重新出现00:00:00。

df_2= df_2.resample('D', how='mean')

1 个答案:

答案 0 :(得分:0)

Concat只会将您的两个数据帧相互堆叠。

您要使用的是Join

result = df_1.join(df_2)

这将在索引列上将df_1df_2连接起来。