在我的问题中有两个文件,我想将它们组合成一个数据集两个文件。第一个文件有一个隐含的行号,在第二个文件中称为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()
好吧,这个例子可能不太好。但说明了我的需要。
答案 0 :(得分:1)
您可以使用结构化数组管理某些内容:
names
从两个文件中创建两个结构化数组numbers
和np.genfromtxt
。不要忘记使用dtype=None
(让np.genfromtxt
猜测您的数据类型)和names=True
(字段名称应该从第一列读取),可能使用delimiter="\t"
。< / LI>
您的names
会有dtype([('Name', '|S7'), ('Adress', '|S16')])
,numbers
类dtype([('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]
。