Python 数据帧的几个时间序列
我无法将多个时间序列合并到一个公共数据帧。我正在使用的示例代码:Python 数据帧的几个时间序列,python,pandas,time-series,Python,Pandas,Time Series,我无法将多个时间序列合并到一个公共数据帧。我正在使用的示例代码: import pandas import datetime import numpy as np start = datetime.datetime(2001, 1, 1) end = datetime.datetime(2001, 1, 10) dates = pandas.date_range(start, end) serie_1 = pandas.Series(np.random.randn(10), index = d
import pandas
import datetime
import numpy as np
start = datetime.datetime(2001, 1, 1)
end = datetime.datetime(2001, 1, 10)
dates = pandas.date_range(start, end)
serie_1 = pandas.Series(np.random.randn(10), index = dates)
start = datetime.datetime(2001, 1, 2)
end = datetime.datetime(2001, 1, 11)
dates = pandas.date_range(start, end)
serie_2 = pandas.Series(np.random.randn(10), index = dates)
start = datetime.datetime(2001, 1, 3)
end = datetime.datetime(2001, 1, 12)
dates = pandas.date_range(start, end)
serie_3 = pandas.Series(np.random.randn(10), index = dates)
print 'serie_1'
print serie_1
print 'serie_2'
print serie_2
print 'serie_3'
print serie_3
serie_4 = pandas.concat([serie_1,serie_2], join='outer', axis = 1)
print 'serie_4'
print serie_4
serie_5 = pandas.concat([serie_4, serie_3], join='outer', axis = 1)
print 'serie_5'
print serie_5
这给了我5级联赛(第二个联赛)的错误:
怎么了?正如我所说,可能是基本的,但我无法理解,而且我是一个初学者…连接
系列的列表
会返回一个数据帧
。因此,serie_4
是一个DataFrame
<代码>系列3是一个系列
。将数据帧
与系列
连接会引发异常
你可以用
import pandas as pd
serie_5 = pd.concat([serie_1, serie_2, serie_3], join='outer', axis=1)
相反
比如说,
import functools
import numpy as np
import pandas as pd
s1 = pd.Series([0,1], index=list('AB'))
s2 = pd.Series([2,3], index=list('AC'))
result = pd.concat([s1, s2], join='outer', axis=1, sort=False)
print(result)
屈服
0 1
A 0.0 2.0
B 1.0 NaN
C NaN 3.0
index s3 s4
0 A 0 2.0
1 A 0 3.0
2 B 1 NaN
注意,您将得到一个ValueError
如果尝试将序列与非唯一索引连接起来。
比如说,
s3 = pd.Series([0,1], index=list('AB'), name='s3')
s4 = pd.Series([2,3], index=list('AA'), name='s4') # <-- non-unique index
result = pd.concat([s3, s4], join='outer', axis=1, sort=False)
要解决此问题,请重置索引,改为:
好吧,那我不明白为什么我会犯这个错误。我还测试了通过将代码更改为:serie_5=pandas.concat([serie_4,pandas.DataFrame(serie_3)],join='outer',axis=1)将一个数据帧与另一个数据帧连接起来。这意味着我可以将两个系列连接到一个数据帧,然后将这个数据帧连接到另一个数据帧。我需要找到一个通用的解决方案,在这个解决方案中,我可以在一个循环中添加一些系列,而我不需要事先计算这些系列。只需创建一个Python列表,将您的系列附加到其中,然后将其提供给pandas.concat,正如@unutbu在上面所写的那样。join的使用看起来已经足够通用了!我把它改为“serie_5=serie_4.join(serie_3,how='outer')”,以便在上面的例子中包括2012-01-12。我想要得到一个通用的解决方案的原因是,我想要组合几个不同的时间序列,其中会有缺失的数据,并使用Pandas功能来处理缺失的数据。谢谢为什么命令
serie_5=pandas.concat([serie_1,serie_2,serie_3],join='outer',axis=1)
不适用于我的系列?它返回错误:无法从重复轴重新编制索引实际上mySeries,就像这里使用的series一样,都是pandas.core.series.series,但我的还有第二个规范。您是否建议再问一个问题?@SPS:至少有一个系列具有非唯一索引pd.concat
引发ValueError:在这种情况下,无法从重复轴重新编制索引。要解决此问题,请将每个系列转换为一个数据帧(例如,s=s.reset_index()
),然后在索引
列上进行外部处理:(例如,functools.reduce(lambda left,right:pd.merge(left,right,on='index',how='outer'),[s.reset_index(),用于[serie_1,serier_2,serie_3]])
)。
s3 = pd.Series([0,1], index=list('AB'), name='s3')
s4 = pd.Series([2,3], index=list('AA'), name='s4') # <-- non-unique index
result = pd.concat([s3, s4], join='outer', axis=1, sort=False)
ValueError: cannot reindex from a duplicate axis
import functools
s3 = pd.Series([0,1], index=list('AB'), name='s3')
s4 = pd.Series([2,3], index=list('AA'), name='s4') # <-- non-unique index
result = functools.reduce(
lambda left,right: pd.merge(left,right,on='index',how='outer'),
[s.reset_index() for s in [s3,s4]])
print(result)
index s3 s4
0 A 0 2.0
1 A 0 3.0
2 B 1 NaN