Python 熊猫爆炸-无法从重复轴重新建立索引
假设我有一个数据帧Python 熊猫爆炸-无法从重复轴重新建立索引,python,pandas,dataframe,Python,Pandas,Dataframe,假设我有一个数据帧df: C1 C2 C3 C4 C5 0 [A] [1] s1 [123] t1 1 [A] [1] s2 321 t2 2 [A,B] [1,2] s3 [777,111] t3 3 [B] [2] s4 145 t4
df
:
C1 C2 C3 C4 C5
0 [A] [1] s1 [123] t1
1 [A] [1] s2 321 t2
2 [A,B] [1,2] s3 [777,111] t3
3 [B] [2] s4 145 t4
4 [B] [2] s5 [990] t5
5 [A,B,B] [1,2,2] s6 [124,125,765] t6
6 [A,A] [1,3] s7 119 t7
我想把一切都搞清楚,所以我一直在做
df=df.apply(pd.Series.explode)
但是,这给了我ValueError:无法从重复轴重新编制索引。我已将罪犯追查到df
的第6行(最后一行)。当我以前在C1
中有一些东西与C2
中的东西长度不一样时,我明白了这一点。但我不明白爆炸最后一排有什么问题
如果我使用pd.DataFrame([[['A','B'],[1,2],'s7',119,'t7']]).apply(pd.Series.explode()
,它可以正常工作,并如预期的那样为我提供以下信息:
C1 C2 C3 C4 C5
0 A 1 s7 119 t7
1 A 3 s7 119 t7
我不明白为什么最后一行是整个数据帧的一部分时会导致错误。我检查了索引,它是唯一的。边清理边工作
df = pd.DataFrame({'C1': [["A"], ["A"], ["A","B"], ["B"], ["B"], ["A","B","B"], ["A","A"]],
'C2': [[1], [1], [1,2], [2], [2], [1,2,2], [1,3]],
'C3': ['s1', 's2', 's3', 's4', 's5', 's6', 's7'],
'C4': [[123], 321, [777,111], 145, [990], [124,125,765], 119],
'C5': ['t1', 't2', 't3', 't4', 't5', 't6', 't7']})
df.explode("C1").reset_index().drop("index",1).explode("C2").reset_index()\
.drop("index",1).explode("C4").reset_index().drop("index",1)
输出
C1 C2 C3 C4 C5
0 A 1 s1 123 t1
1 A 1 s2 321 t2
2 A 1 s3 777 t3
3 A 1 s3 111 t3
4 A 2 s3 777 t3
5 A 2 s3 111 t3
6 B 1 s3 777 t3
7 B 1 s3 111 t3
8 B 2 s3 777 t3
9 B 2 s3 111 t3
这回答了你的问题吗?这并没有回答我的问题,但这就是应用(pd.Series.explode)的地方。。我不知道为什么它在最后一行不起作用。@formicaman你能以一种更容易复制的方式给出第一个数据帧吗?比如使用
df.head(7).to_dict()
?显然,每个列表的长度必须相同才能使用.apply(pd.Series.explode)
——更多详细信息如下: