Python 替换字符串Numpy列表中的单个字符
我有一个datetime64对象的Numpy数组,需要将其转换为特定的时间格式yyyy-mm-dd,HH:mm:SS.SSS Numpy有一个名为Python 替换字符串Numpy列表中的单个字符,python,numpy,datetime64,Python,Numpy,Datetime64,我有一个datetime64对象的Numpy数组,需要将其转换为特定的时间格式yyyy-mm-dd,HH:mm:SS.SSS Numpy有一个名为datetime\u as\u string的函数,它输出ISO8601(yyy-mm-ddTHH:mm:SS.SSS)时间,这与我想要的非常接近,唯一的区别是我想要一个逗号的T 有没有办法快速地把“T”换成“,”呢?以下是一个示例数据集: offset = np.arange(0, 1000) epoch = np.datetime64('1970-
datetime\u as\u string
的函数,它输出ISO8601(yyy-mm-ddTHH:mm:SS.SSS)时间,这与我想要的非常接近,唯一的区别是我想要一个逗号的T
有没有办法快速地把“T”换成“,”呢?以下是一个示例数据集:
offset = np.arange(0, 1000)
epoch = np.datetime64('1970-01-01T00:00:00.000')
time_objects = epoch + offset.astype('timedelta64[ms]')
time_strings = np.datetime_as_string(time_objects)
我已经成功地使用了lambda和列表理解,但从Python列表到Numpy数组的来回切换似乎有些尴尬
f = lambda x: x[:10] + ',' + x[11:]
np.array([f(x) for x in time_strings])
我知道在某些情况下,lambda可以“直接”应用于Numpy数组,但在这种情况下不起作用f(时间字符串)
产生类型错误。有什么想法吗
我知道我可以转换回Python datetime(这是我的方向)或使用Pandas。但是datetime\u as\u string
函数非常快,我想继续使用Numpy解决方案
---基于答案的结论--事实证明,保罗的《施展黑魔法》比我对列表的理解快75倍,比
np.char.replace()
快100倍。以下是三种方法的结果(所有方法都是用上述数据集初始化的,但有1000000个元素)
您可以使用viewcasting访问单个角色:
time_strings[...,None].view('U1')[...,10] = ','
更改时间字符串。您可以使用viewcasting访问单个字符:
time_strings[...,None].view('U1')[...,10] = ','
In [309]: np.char.replace(time_strings,'T',',')
Out[309]:
array(['1970-01-01,00:00:00.000', '1970-01-01,00:00:00.001',
'1970-01-01,00:00:00.002', '1970-01-01,00:00:00.003',
'1970-01-01,00:00:00.004', '1970-01-01,00:00:00.005',
'1970-01-01,00:00:00.006', '1970-01-01,00:00:00.007',
....
更改时间\u字符串
到位
In [309]: np.char.replace(time_strings,'T',',')
Out[309]:
array(['1970-01-01,00:00:00.000', '1970-01-01,00:00:00.001',
'1970-01-01,00:00:00.002', '1970-01-01,00:00:00.003',
'1970-01-01,00:00:00.004', '1970-01-01,00:00:00.005',
'1970-01-01,00:00:00.006', '1970-01-01,00:00:00.007',
....
但是@PaulPanzer的就位速度要快得多(即使它有点模糊):
但是@PaulPanzer的就位速度要快得多(即使它有点模糊):
time\u strings=[x.replace('T',',')代表x个时间字符串]
有一个np.char.replace
。虽然方便的速度并不比列表理解好多少。time\u strings=[x.replace('t','),对于x-in-time\u strings]
有一个np.char.replace
。而便捷的速度并不比列表理解好多少。