我有一个 pandas 数据框 df。 一列是一串数字(作为字符)除以空格
我需要将其转换为多维 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']....
第一:我应该怎么做才能让我的日子变成第二种格式? 第二:我实际上对这两种数据结构之间的区别有点困惑。归根结底,多维数组是数组的数组。从这个角度来看,两者似乎是相同的结构。但我确信我错过了一些东西
示例:
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:2者有什么区别?从技术上讲,两者都是数组的数组...
最佳答案
你可以使用str.split
来做到这一点直接在 df.A
上,使用参数 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
是一个一维元素数组,而它恰好也是一维数组。当您使用 values
构造 arr2
时,它会从系列 df.A.apply(lambda x: np.array(x.split("")))
无需查看本系列中的类型。对于 arr1
,区别在于 df.A.str.split(' ',expand=True)
不是一个系列而是一个数据帧,因此使用 values
将构造一个形状为(行数,nb 列)
的二维数组。在这两种情况下,您都使用 values
,但实际上在系列的单元格中拥有一个数组(如在您的方法中创建的)不会创建二维数组。
然后,如果您想访问任何元素(例如第一行第二个元素),您可以通过 arr1[0,1]
while arr2[0,1]
会抛出错误,因为该结构不是二维数组,但 arr2[0][1]
给出了很好的答案,因为您访问了第二个元素 [1]
arr2
中第一个一维数组 [0]
的 >。
我希望它能给出一些解释。
关于python - 一系列列表到多维 np 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51861904/