2015-01-07 3 views
1

У меня есть серия в пандах, состоящая из пустых списков.добавить элемент к списку в пандах по индексу

>>> s = pd.Series([[]] * 20, index= range(0,20))

Я хочу, чтобы добавить теги к определенным элементам по индексу.

>>> for i in [1,3,5,7,11]: 
...  s.loc[ i ].append('prime') 

, но это то, что я получаю:

>>> s 
0  [prime, prime, prime, prime, prime] 
1  [prime, prime, prime, prime, prime] 
2  [prime, prime, prime, prime, prime] 
3  [prime, prime, prime, prime, prime] 
4  [prime, prime, prime, prime, prime] 
5  [prime, prime, prime, prime, prime] 
6  [prime, prime, prime, prime, prime] 
7  [prime, prime, prime, prime, prime] 
8  [prime, prime, prime, prime, prime] 
9  [prime, prime, prime, prime, prime] 
10 [prime, prime, prime, prime, prime] 
11 [prime, prime, prime, prime, prime] 
12 [prime, prime, prime, prime, prime] 
13 [prime, prime, prime, prime, prime] 
14 [prime, prime, prime, prime, prime] 
15 [prime, prime, prime, prime, prime] 
16 [prime, prime, prime, prime, prime] 
17 [prime, prime, prime, prime, prime] 
18 [prime, prime, prime, prime, prime] 
19 [prime, prime, prime, prime, prime] 
dtype: object 

Который не то, что я хочу.

Я хотел бы, чтобы это было так:

>>> s 
0  [] 
1  [prime] 
2  [] 
3  [prime] 
4  [] 
5  [prime] 
6  [] 
7  [prime] 
8  [] 
9  [] 
10 [] 
11 [prime] 
12 [] 
... 

Я стучал голову к столу в течение часа на это. Всего pandas newb.

UPDATE

следующие работы, как и ожидалось.

s = pd.Series([[]] * 20, index= range(0,20)) 
>>> for i in [1,3,5,7,11]: 
...  s.loc[ i ] = s.loc[ i ] + ['prime'] 

В конечном итоге я хочу, чтобы на каждом индексе находилось несколько «тегов», это откат на данный момент. Мне все еще хотелось бы знать, почему приложение не работает.

+1

Не уверен, что вы пытаетесь достичь здесь, но вы можете просто изменить строку следующим образом: 's.iloc [я] = [«простой»]' – EdChum

+1

Be предупредил: наличие списков (или, в более общем плане, нескаляров) в качестве элементов в рядах и в DataFrames обычно приводит к головным болям, хотя иногда это полезно в качестве промежуточного шага. – DSM

ответ

1

Попробуйте это:

s = pd.Series([[] for _ in range(20)], index= range(0,20)) 

Ваша проблема заключается в том, что вместо того, чтобы иметь несколько различных пустых списков у вас есть ссылка на тот же список в несколько раз. Пример, так что вы видите проблему:

>>> lists = [[]] * 5 
>>> lists 
[[], [], [], [], []] 
>>> lists[0].append(1) 
>>> lists 
[[1], [1], [1], [1], [1]] 
Смежные вопросы