Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 数据帧的几个时间序列_Python_Pandas_Time Series - Fatal编程技术网

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