繁体   English   中英

将一个 numpy 列拆分为两列并将它们保留在原始数组中

[英]Split a numpy column into two columns and keep them in the original array

我有一个 numpy 数组,它有 3 列。 有 100,000 行,但这里是前两行:

 burger flipper  part time  12-5.00
 spam flipper    full time  98-10.00

问题是,工作代码(12 和 98)以某种方式与小时工资(5.00 和 10.00)结合在一起。

在 numpy 中是否有一种简单的方法可以将此列分成两部分,并去掉不必要的“-”字符,如下所示:

 burger flipper  part time  12  5.00
 spam flipper    full time  98  10.00

提前致谢。

使用hstack一种方法:

import numpy as np
a = np.array([['burger flipper',  'part time',  '12-5.00'],
             ['spam flipper',    'full time',  '98-10.00']])
a = np.hstack((a[:,:2], map(lambda x: x.split('-'), a[:,2])))
print a

输出:

[['burger flipper' 'part time' '12' '5.00']
 ['spam flipper' 'full time' '98' '10.00']]

一点解释:

  1. 函数numpy.hstack允许您水平堆叠多个 numpy 数组。 例如,

     np.hstack((a[:,[0,1]], a[:,[2]]))

    生成具有三列的原始数组a 请注意,在a[:,[2]][a:,2]使用方括号将不起作用,因为它会生成一维数组( len(a[:,2].shape)等于 1)。

  2. map语句将函数lambda x: x.split('-')应用于数组的有问题的列(即第 3 列)。 对 lambda 函数的每次调用都会返回一个包含分隔的工作代码和工资的列表,例如['12', '5.00'] 因此, map语句会生成一个类似于[['12', '5.00'], ['98', '10.00']]的列表列表。 当被送入hstack时,这可以转换为一个有 2 列的 numpy 数组。

代码hstack原始数组的前两列与通过map获得的列表列表,最终得到一个类似于您想要的数组。

map(lambda x: x.split('-'), a[:,2])现在给出一个列表而不是导致以下错误的两列:

ValueError: all the input arrays must have same number of dimensions

需要将之前的代码改为:

import numpy as np
a = np.array([['burger flipper',  'part time',  '12-5.00'],
             ['spam flipper',    'full time',  '98-10.00']])
a_newcolumns = np.hstack((map(lambda x: x.split('-'), a[:, 2]))).reshape(a.shape[0], 2)
# need to reshape the list into a two column numpy array
a = np.hstack((a[:, :2], a_newcolumns))
print a

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM