使用numpy数组设置列的值

时间:2014-05-20 12:44:44

标签: python pandas

我遇到的问题是我想使用numpy向量为给定列设置所有值。请考虑以下

import pandas as pd
from numpy import arange
from scipy import random

index = pd.MultiIndex.from_product([arange(0,3), arange(10,15)], names=['A', 'B'])
df = pd.DataFrame(columns=['test'], index=index)
someValues = random.randint(0, 10, size=5)
df.loc[0,:]['test'] = someValues
print someValues
print df.loc[0,:]

输出

Out[423]: array([9, 2, 7, 2, 4])
Out[422]: 
   test
B      
10  NaN
11  NaN
12  NaN
13  NaN
14  NaN

这是 - 我猜 - 从我没有提供值的索引。如果"顺序"我怎么能做这个操作呢?值在numpy数组中出现的顺序是它们应该设置在列上的顺序吗?

1 个答案:

答案 0 :(得分:1)

可以执行此操作,但由于右侧(受让人)未标记,因此只会分配第一个len(受让人)值

In [1]: import pandas as pd

In [2]: from numpy import arange

In [3]: from scipy import random

In [4]: index = pd.MultiIndex.from_product([arange(0,3), arange(10,15)], names=['A', 'B'])

In [5]: df = pd.DataFrame(columns=['test'], index=index)

In [6]: someValues = random.randint(0, 10, size=5)

In [8]: df.loc[0,'test'] = someValues

In [9]: df
Out[9]: 
     test
A B      
0 10    0
  11    8
  12    2
  13    0
  14    2
1 10  NaN
  11  NaN
  12  NaN
  13  NaN
  14  NaN
2 10  NaN
  11  NaN
  12  NaN
  13  NaN
  14  NaN

[15 rows x 1 columns]

如果指定索引,则会分配匹配值。

In [34]: df.loc[:,'test'] = Series(someValues,index=pd.MultiIndex.from_tuples([(0,10),(0,11),(1,10),(1,11),(1,14)]))

In [35]: df
Out[35]: 
      test
A B       
0 10     5
  11     9
  12   NaN
  13   NaN
  14   NaN
1 10     1
  11     0
  12   NaN
  13   NaN
  14     7
2 10   NaN
  11   NaN
  12   NaN
  13   NaN
  14   NaN
相关问题