我正在使用numpy和pandas来尝试将一些异构值连接成一个数组。
np.concatenate((tmp, id, freqs))
以下是确切的值:
tmp = np.array([u'DNMT3A', u'p.M880V', u'chr2', 25457249], dtype=object)
freqs = np.array([0.022831050228310501], dtype=object)
id = "id_23728"
tmp
,17232
和freqs
的尺寸如下:
[in] tmp.shape
[out] (4,)
[in] np.array(17232).shape
[out] ()
[in] freqs.shape
[out] (1,)
我也尝试将它们全部作为numpy数组投射无济于事。
虽然变量freqs
通常会有多个值。
但是,对于np.concatenate
和np.append
函数,我收到以下错误:
*** ValueError: all the input arrays must have same number of dimensions
这些列具有相同数量的列(0)
,为什么我不能将它们与上述任何一种numpy方法连接起来?
我想在一个单维数组中获取[(tmp), 17232, (freqs)]
,这个数组将被附加到pandas数据帧的末尾。
感谢。
更新
看来我可以连接两个现有的数组:
np.concatenate([tmp, freqs],axis=0)
array([u'DNMT3A', u'p.M880V', u'chr2', 25457249, 0.022831050228310501], dtype=object)
但是,整数,即使在连接时也不能用于连接。
np.concatenate([tmp, np.array(17571)],axis=0)
*** ValueError: all the input arrays must have same number of dimensions
什么工作,但嵌套追加和连接
np.concatenate((np.append(tmp, 17571), freqs),)
array([u'DNMT3A', u'p.M880V', u'chr2', 25457249, 17571,
0.022831050228310501], dtype=object)
虽然这有点混乱。有没有人有更好的解决方案来连接多个异构数组?
答案 0 :(得分:2)
问题是id
以及后来integer
np.array(17571)
不是array_like
对象。请参阅here numpy如何确定对象是否可以自动转换为numpy数组。
解决方案是制作id
array_like
,即成为list
或tuple
的元素,以便numpy了解id
属于1D
array_like
结构
这一切归结为
concatenate((tmp, (id,), freqs))
或
concatenate((tmp, [id], freqs))
为了避免在使用numpy
处理函数中的输入变量时出现这类问题,可以使用atleast_1d
,如@askewchan所指出的那样。请参阅this问题/答案。
基本上,如果您不确定在不同的情况下,您的变量id
是单个str
还是str
列表,那么您最好使用
concatenate((tmp, atleast_1d(id), freqs))
因为如果id
已经是字符串的列表/元组,则上述两个选项将失败。
编辑:为什么np.array(17571)
不是array_like
对象可能并不明显。这是因为np.array(17571).shape==()
,因此它不可迭代,因为它没有维度。