我有以下代码:
s = output.set_index('name')['col1']
df = pd.DataFrame(s.values.tolist(), index=s.index).stack().reset_index()
第二行引发错误:
IndexError: list index out of range
我只想了解为什么会发生?
s.index
返回:
Index(['100100', '100200', '100300'], dtype='object', name='name')
s.values.tolist()
返回:
[
[],
[],
[]
]
更新:
这是s
的示例。这应该是一个起点。
col1
a []
b []
c []
d ["c1","c2"]
如果col1
在所有行中均为空,则代码在df = pd.DataFrame(s.values.tolist(), index=s.index).stack().reset_index()
处失败。
此代码对我来说失败(python 3.7和pandas 0.24.2):
s = pd.DataFrame({'name':['a','b','c'],
'col1': [[],[],[]]}).set_index('name')
s.col1.apply(pd.Series).stack().dropna().reset_index()
目标是如果所有col1值均为[],则获取空的DataFrame,或者获取以下DataFrame(对于上面显示的s
示例):
df =
name col1
d c1
d c2
答案 0 :(得分:0)
s.values.tolist()
给出[[], [], [], ['c1', 'c2']]
,这并不是您真正想要的。我认为您需要pd.Series
而不是tolist
:
s = pd.DataFrame({'name':['a','b','c','d','e'],
'col1': [[],[],[],['c1','c2'],['d','e','f']]}).set_index('name')
s.col1.apply(pd.Series).stack().dropna().reset_index()
输出:
+---+------+---------+----+
| | name | level_1 | 0 |
+---+------+---------+----+
| 0 | d | 0 | c1 |
| 1 | d | 1 | c2 |
| 2 | e | 0 | d |
| 3 | e | 1 | e |
| 4 | e | 2 | f |
+---+------+---------+----+