我有一个 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']]
一些解释:
函数numpy.hstack允许您水平堆叠多个 numpy 数组。例如,
np.hstack((a[:,[0,1]], a[:,[2]]))
生成具有三列的原始数组
a
。请注意,在a[:,[2]]
中使用括号,[a:,2]
将不起作用,因为它会生成一维数组 (len (a[:,2].shape)
等于 1).map
语句将函数lambda x: x.split('-')
应用于数组的问题列(即第 3 列) .每次调用 lambda 函数都会返回一个列表,其中包含分离的工作代码和工资,例如['12', '5.00']
。因此,map
语句生成一个列表列表,看起来像[['12', '5.00'], ['98', '10.00']]
。当被馈送到hstack
时,可以将其转换为具有 2 列的 numpy 数组。
代码hstack
将原始数组的前两列与通过map
获取的list列表进行比较,最终得到一个类似于你想要的数组。
关于python - 将一个 numpy 列拆分为两列并将它们保留在原始数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926346/