Python 创建具有列名和类型的空numpy,并添加第一行

Python 创建具有列名和类型的空numpy,并添加第一行,python,arrays,numpy,Python,Arrays,Numpy,正如标题所说,我想创建一个空的numpy数组,并添加第一行, 当然,以后会有更多,但第一步是第一步 我尝试: myNp= np.empty( shape=(0,8), dtype=[('city', np.str_), ('country_code', np.str_), ('latitude', np.single),

正如标题所说,我想创建一个空的numpy数组,并添加第一行, 当然,以后会有更多,但第一步是第一步

我尝试:

myNp= np.empty( shape=(0,8),
                 dtype=[('city', np.str_), 
                        ('country_code', np.str_), 
                        ('latitude', np.single), 
                        ('longitude', np.single), 
                        ('timezone', np.str_), 
                        ('is_active' , np.bool_),
                        ('is_underInv' , np.bool_),
                        ('is_promoted' , np.bool_)
                        ])


sampleCity=['myCity','ZA',51.51,-0.123,'Central TimeZone',True,True,True]

print(myNp)
print(sampleCity)

myNp= np.vstack((myNp, sampleCity))

print(myNp)

但我得到的只是无效的类型提升

你很接近了。当您混合使用数据类型string、Float和bools时,会得到一个结构化数组或记录数组。 您的数据类型是正确的,但是形状应该是这样的元组:shape=nrows,。 此外,在创建空数组时,还需要分配字符串大小。 请参阅下面修改的代码。它显示了如何将数据添加到一行。您还可以按列添加数据,引用字段名myNp['city']=array\u of_city\u names


samplecity必须是具有匹配数据类型的数组。但从更大的角度来看,不要通过vstack重复构建任何形状或数据类型的数组。从元组列表中构建结构化数组,或者按照答案中的操作使用元素赋值。如果必须连接,请确保所有数组都具有匹配的数据类型。不要以为np.vstack会为您这样做。请注意答案中的数据类型更正。我认为错误在他试图纠正的列表中。它的数据类型不匹配。我不使用vstack,因此无法发表评论。将np.str与np.empty一起使用会导致“城市”、“国家代码”和“时区”的字符串长度为零。分配它们可能足以解决问题。另外,我刚刚注意到我的代码中有一个剪切粘贴错误,我将修复它。
dt = dtype=[('city',  'S20'), 
            ('country_code', 'S20'), 
            ('latitude', np.single), 
            ('longitude', np.single), 
            ('timezone',  'S20'), 
            ('is_active' , np.bool_),
            ('is_underInv' , np.bool_),
            ('is_promoted' , np.bool_)
            ]

myNp = np.empty( shape=(8,), dtype=dt)

sampleCity = np.array([('myCity','ZA',51.51,-0.123,
                        'Central TimeZone',True,True,True)], 
                         dtype=dt)

print(sampleCity)
myNp[0] = sampleCity    
print(myNp[0])