我有一个熊猫数据框df。 一栏是一串数字(作为字符)除以空格
我需要将其转换为multidim numpy数组。
我认为:
df.A.apply(lambda x: np.array(x.split(" "))).values
会骗人的
实际上,它返回一个数组数组。...
array([array(['70', '80', '82', ..., '106', '109', '82'], dtype='<U3'),
array(['151', '150', '147', ..., '193', '183', '184'], dtype='<U3'),
我所寻找的似乎不是我想要的样子
array([[[['70', '80', '82', ..., '106', '109', '82'],['151', '150', '147', ..., '193', '183', '184']....
第一:我应该怎么做才能让第二种格式的Daya? 第二:我实际上对这两种数据结构之间的差异感到困惑。归根结底,多维数组就是数组数组。从这个角度看,这两个似乎是相同的结构。但是我确定我缺少东西
示例:
df=pd.DataFrame({"A":[0,1,2,3],"B":["1 2 3 4","5 6 7 8","9 10 11 12","13 14 15 16"]})
A B
0 0 "1 2 3 4"
1 1 "5 6 7 8"
2 2 "9 10 11 12"
3 3 "13 14 15 16"
此命令
df.B.apply(lambda x: np.array(x.split(" "))).values
给予:
array([array(['1', '2', '3', '4'], dtype='<U1'),
array(['5', '6', '7', '8'], dtype='<U1'),
array(['9', '10', '11', '12'], dtype='<U2'),
array(['13', '14', '15', '16'], dtype='<U2')], dtype=object)
代替
array([['1', '2', '3', '4'],
['5', '6', '7', '8'],
['9', '10', '11', '12'],
['13', '14', '15', '16']], dtype='<U2')
问题1:如何获得最后的结构? 问题2:两者之间有什么区别?从技术上讲都是数组的数组...
答案 0 :(得分:3)
您可以直接在df.A
上使用str.split
,并使用参数expand=True
,然后使用values
,例如:
df = pd.DataFrame({'A':['70 80 82','151 150 147']})
print (df.A.str.split(' ',expand=True).values)
array([['70', '80', '82'],
['151', '150', '147']], dtype=object)
使用您的方法,如果所有字符串都包含相同数量的数字,您仍然可以使用np.stack
获得相同的结果:
print (np.stack(df.A.apply(lambda x: np.array(x.split(" "))).values))
编辑:对于差异,不确定我是否可以解释得足够好,但我会尝试。让我们定义
arr1 = df.A.str.split(' ',expand=True).values
arr2 = df.A.apply(lambda x: np.array(x.split(" "))).values
首先,您会注意到形状不同:
print(arr1.shape)
(2, 3)
print(arr2.shape)
(2,)
所以我要说的一个区别是arr2
是元素的一维数组,恰好也是一维数组。当您使用arr2
构造values
时,它将根据意向df.A.apply(lambda x: np.array(x.split(" ")))
构造一维数组,而无需查看该意向中的类型。对于arr1
,不同之处在于df.A.str.split(' ',expand=True)
不是一个序列,而是一个数据帧,因此使用values
将构造一个形状为(number of rows,nb of columns)
的2D数组。在这两种情况下,您都使用values
,但是实际上在一个意向单元格中有一个数组(按照您的方法创建)不会创建2D数组。
然后,如果您要访问任何元素(例如第一行的第二个元素),则可以通过arr1[0,1]
进行操作,而arr2[0,1]
会抛出错误,因为该结构不是2D数组,但是arr2[0][1]
提供了很好的答案,因为您访问了[1]
中第一个1D数组[0]
的第二个元素arr2
。
我希望它能提供一些解释。