将数据与numpy结合在两个文件中

时间:2012-09-19 14:30:10

标签: python numpy

在我的问题中有两个文件,我想将它们组合成一个数据集两个文件。第一个文件有一个隐含的行号,在第二个文件中称为ident。所以Janine是ident 1,jasmine是ident 2,judith是ident 3.

姓名:

Name    Address
Janine  Unicorn Lane
Jasmine Sparkles Street
Judith  Rainbow Avenue

电话号码:

Number Ident
123    1
893    1
345    2 
746    3

如何组合这两个表来获取每个地址的电话号码?我想做的是:

data[Adress='Unicorn Lane']['Number'].mean()
好吧,这个例子可能不太好。但说明了我的需要。

1 个答案:

答案 0 :(得分:1)

您可以使用结构化数组管理某些内容:

  • 例如,使用names从两个文件中创建两个结构化数组numbersnp.genfromtxt。不要忘记使用dtype=None(让np.genfromtxt猜测您的数据类型)和names=True(字段名称应该从第一列读取),可能使用delimiter="\t"。< / LI>

您的names会有dtype([('Name', '|S7'), ('Adress', '|S16')])numbersdtype([('Number', '<i8'), ('Ident', '<i8')])

之后,只需要花哨的索引即可获得您的选择。例如,如果您想要names的{​​{1}}条目的索引:

"Unicorn Lane"

(idx,) = np.nonzero(names['Adress']=="Unicorn Lane") 应该返回一个元素,一个元素,一个索引数组)。举个例子,np.nonzero ...)

您可以将这些索引用作标识符,请注意,当您的标识符从1开始时,它们从0开始。因此,要选择idx = array([0])与您找到的索引匹配的numbers

Ident

(请记住,在我们的示例中,numbers[numbers['Ident'] == idx+1] 对应idx=array([0]) ...)。

您应该检查Ident==1是否为空(idx)。否则idx.size >0也将为空,idx+1将评估为numbers['Ident']==idx+1,而在NumPy中,False相当于numbers[False]