我不明白为什么我的代码不起作用。
如果执行下面的代码,则会出现以下错误:
pandas.core.indexes.base.InvalidIndexError:仅对具有唯一值的Index对象有效的索引。
创建的系列具有所有时间戳索引,其中某些条目相同。我不明白与manual大熊猫的例子有什么不同, 因为dfs的索引也具有相同的索引。
ds = pd.Series([dat[1] for dat in dic_data[name]], index=[dat[0] for dat in dic_data[name]], name=name) # create the series
ds_list.append(ds)
df = pd.concat(ds_list,axis=1,sort=False) # i copyed this line from the example, from the pandas manual
应该像示例中那样创建结果数据框 pics
答案 0 :(得分:0)
在熊猫的示例中,您可以拥有一个pandas.Series
,它的索引值与要连接的另一个索引值相同或相似。但是,每个pandas.Series
索引值都必须是唯一的。
即len(ds.index) - len(ds.index.unique())
应等于0
您在ds
中的索引具有多个相同的值。
如果要基于index
进行串联,则不清楚如何将这些索引与另一个pandas.Series
结合使用,因此您将收到错误消息。
例如,如果每个ds
具有唯一的索引,则您的代码将起作用。
ds_list = []
dates = pd.date_range(start='1/1/2019', periods=7); values = np.arange(7)
dic_data = {'Col1' : [(dates[i], values[i]) for i in range(7)], 'Col2' : [(dates[i], values[i]*2) for i in range(7)]}
for name in dic_data.keys():
ds = pd.Series([dat[1] for dat in dic_data[name]], index=[dat[0] for dat in dic_data[name]], name=name)
ds_list.append(ds)
df = pd.concat(ds_list,axis=1,sort=False)
In [43]: df
Out[43]:
Col1 Col2
2019-01-01 0 0
2019-01-02 1 2
2019-01-03 2 4
2019-01-04 3 6
2019-01-05 4 8
2019-01-06 5 10
2019-01-07 6 12
但是,如果您的ds
具有重复的索引值,则不会:
dic_data = {'Col1' : [(dates[i % 7], values[i % 7]) for i in range(12)], 'Col2' : [(dates[i], values[i]*2) for i in range(7)]}
for name in dic_data.keys():
ds = pd.Series([dat[1] for dat in dic_data[name]], index=[dat[0] for dat in dic_data[name]], name=name)
ds_list.append(ds)
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
作为一种解决方法,我将通过例如groupby
来汇总时间戳,或者您希望对这些重复项进行汇总:
dic_data = {'Col1' : [(dates[i % 7], values[i % 7]) for i in range(12)], 'Col2' : [(dates[i], values[i]*2) for i in range(7)]}
for name in dic_data.keys():
ds = pd.Series([dat[1] for dat in dic_data[name]], index=[dat[0] for dat in dic_data[name]], name=name)
ds = ds.groupby(level=0).sum()
ds_list.append(ds)
或者您也可以删除重复项,例如ds.drop_duplicates()
...