Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 替换字符串Numpy列表中的单个字符_Python_Numpy_Datetime64 - Fatal编程技术网

Python 替换字符串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-

我有一个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-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
。而便捷的速度并不比列表理解好多少。