我只想要数组中每个值的前10个字符。
这是数组:
array(['2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-09-30T00:00:00.000000000']
我想写一些能给我的代码:
array(['2018-06-30','2018-06-30' .... etc
这是一个更新: 我的代码是:
x = np.array(df4['per_end_date'])
x
输出为:
array(['2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-09-30T00:00:00.000000000',
'2018-09-30T00:00:00.000000000', '2018-09-30T00:00:00.000000000', etc
我只想要数组中每个值的前10个字符。 以下代码给我错误IndexError:标量变量的无效索引。
x = np.array([y[:9] for y in x])
答案 0 :(得分:1)
尽管numpy
并非始终是处理字符串的最佳方法,但是您可以向量化此操作,并且与往常一样,向量化的函数应优先于迭代。
设置
arr = np.array(['2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-09-30T00:00:00.000000000'],
dtype='<U29')
使用 np.frombuffer
np.frombuffer(
arr.view((str, 1 )).reshape(arr.shape[0], -1)[:, :10].tostring(),
dtype=(str,10)
)
array(['2018-06-30', '2018-06-30', '2018-06-30', '2018-06-30',
'2018-06-30', '2018-06-30', '2018-06-30', '2018-09-30'],
dtype='<U10')
时间
arr = np.repeat(arr, 10000)
%timeit np.array([y[:10] for y in arr])
48.6 ms ± 961 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit
np.frombuffer(
arr.view((str, 1 )).reshape(arr.shape[0], -1)[:, :10].tostring(),
dtype=(str,10)
)
6.87 ms ± 311 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%timeit np.array(arr,dtype= 'datetime64[D]')
44.9 ms ± 2.93 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
答案 1 :(得分:0)
使用python中的列表是一项非常基本的任务
import numpy
x = numpy.array(['2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-06-30T00:00:00.000000000',
'2018-06-30T00:00:00.000000000', '2018-09-30T00:00:00.000000000'])
numpy.array([y[:10] for y in x])
# array(['2018-06-30', '2018-06-30', '2018-06-30', '2018-06-30',
# '2018-06-30', '2018-09-30'],
# dtype='|S10')
有关更多信息,您应该阅读list comprehensions上的一些文档。
答案 2 :(得分:0)
好的,我知道了。
df4['per_end_date'].dtype
输出:
dtype('<M8[ns]')
因此,以下代码可以完美地工作。
x = np.array(df4['per_end_date'],dtype= 'datetime64[D]')
x
输出:
array(['2018-06-30', '2018-06-30', '2018-06-30', '2018-06-30',
'2018-06-30', '2018-06-30', '2018-06-30', '2018-09-30',
'2018-09-30', '2018-09-30', '2018-09-30', '2018-09-30',
'2018-09-30', '2018-09-30', '2018-09-30', '2018-09-30', etc
太棒了,只要您能弄清楚。 :)