簡體   English   中英

如何解決IndexError:列表索引超出范圍?

[英]How to solve IndexError: list index out of range?

我有以下代碼:

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM