通过索引将项目附加到pandas中列出

时间:2015-01-07 22:17:46

标签: python list pandas

我有一个由空列表组成的熊猫系列。

>>> 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    []
...

我一直在桌子上撞了一个小时。总熊猫newb。

更新

以下按预期工作。

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

我最终会想要多个标签'在每个指数上,这是暂时的回落。我仍然想知道追加为什么不起作用。

1 个答案:

答案 0 :(得分: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]]