基于Monster 组和GPT的调写:
测试1:无法创建包含时间类型的NumPy自定义数据类型
在这个测试中,您试图创建一个包含时间类型的NumPy自定义数据类型。但是,使用空字符串表示缺失值不是一种常见的做法。您可以使用numpy.datetime64('NaT')来表示缺失的日期时间值。以下是一个更新后的示例代码:
import numpy as np
t1 = np.dtype([('age', int), ('date','datetime64[D]')]) # 用 datetime64[D] 表示日期时间
x = np.array([(1, np.datetime64('NaT')), (2, np.datetime64('2018-05-08'))], dtype=t1)
测试2、3、4:
在测试2、3和4中,您将数据框转换为NumPy数组,然后将其传递给用Numba装饰的函数。但是,Numba需要在函数定义之前确定输入数据类型,因此在使用Numba之前,必须明确指定数组的数据类型。这可以通过传递NumPy数组的dtype参数来完成。
以下是测试2、3和4的更新示例代码:
import numpy as np
import pandas as pd
from numba import njit
# 测试2
a1 = np.array([1, 2, 3])
a2 = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='datetime64')
df = pd.DataFrame({'a1': a1, 'a2': a2})
x = df.values.astype([('a1', np.int64), ('a2', 'datetime64[D]')]) # 显式指定数据类型
@njit()
def test(x):
pass
test(x)
# 测试3
a1 = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='datetime64')
a2 = np.array([1, 2, 3])
df = pd.DataFrame({'a1': a1, 'a2': a2})
x = df[['a2', 'a1']].to_records(index=False).astype([('a2', np.int64), ('a1', 'datetime64[D]')]) # 显式指定数据类型
@njit()
def test(x):
pass
test(x)
# 测试4
a1 = np.array(['2020-03', '2020-03-08', '2020-03-08 20:00'], dtype='str')
a2 = np.array([1, 2, 3])
df = pd.DataFrame({'a1': a1, 'a2': a2})
x = df.values.astype([('a1', 'U19'), ('a2', np.int64)]) # 显式指定数据类型
@njit()
def test(x):
pass
test(x)