如何解决IndexError:列表索引超出范围?

时间:2019-04-12 12:24:34

标签: python pandas

我有以下代码:

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

1 个答案:

答案 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  |
+---+------+---------+----+