我有一个Pandas系列对象的字典,我想把它变成一个Dataframe。每个系列的关键应该是列标题。单个系列重叠,但每个标签都是唯一的。
我以为我应该能够做到
df = pd.DataFrame(data)
但我一直收到错误InvalidIndexError: Reindexing only valid with uniquely valued Index objects
。
如果我尝试将每个系列变成一个框架,并使用pd.concat(data, axis=1)
,我会收到同样的错误。
如果考虑列标签,这没有意义。我做错了什么,我该如何解决?
答案 0 :(得分:2)
我认为您需要reset_index
drop=True
Series
dict
s = pd.Series([1,4,5,2,0], index=[1,2,2,3,5])
s1 = pd.Series([5,7,8,1],index=[1,2,3,4])
data = {'a':s, 'b': s1}
print (s.reset_index(drop=True))
0 1
1 4
2 5
3 2
4 0
dtype: int64
df = pd.concat({k:v.reset_index(drop=True) for k,v in data.items()}, axis=1)
print (df)
a b
0 1 5.0
1 4 7.0
2 5 8.0
3 2 1.0
4 0 NaN
print (s[~s.index.duplicated()])
1 1
2 4
3 2
5 0
dtype: int64
df = pd.concat({k:v[~v.index.duplicated()] for k,v in data.items()}, axis=1)
print (df)
a b
1 1.0 5.0
2 4.0 7.0
3 2.0 8.0
4 NaN 1.0
5 0.0 NaN
,因为索引中有重复项:
print (s.groupby(level=0).mean())
1 1.0
2 4.5
3 2.0
5 0.0
dtype: float64
df = pd.concat({k:v.groupby(level=0).mean() for k,v in data.items()}, axis=1)
print (df)
a b
1 1.0 5.0
2 4.5 7.0
3 2.0 8.0
4 NaN 1.0
5 0.0 NaN
如果需要删除行,其中重复索引使用boolean indexing
与duplicated
:
$http
另一种解决方案:
setTimeout