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

标签 python arrays numpy

我有一个 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获取的list列表进行比较,最终得到一个类似于你想要的数组。

关于python - 将一个 numpy 列拆分为两列并将它们保留在原始数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22926346/

相关文章:

python - 如何使用 vpython 库描绘球形物体上的小电荷?

python - 按值对矩阵进行分组和汇总

python - 根据列中的值重复行

python - 在 Python 中将外部函数指定为 staticmethod

Python unittest 分支覆盖似乎错过了 zip 中执行的生成器

c++ - 如何创建一个指针数组并使用 **P 将其指向 NULL?

java - 如何在不使用 .equals 和 false boolean 值的情况下比较数组

java - 如何像Android中的response一样设置数组对象的顺序?

python - 按列就地排序在切片上失败

python - 为什么在类上定义 __getitem__ 使其在 python 中可迭代?