遍历numpy数组转换日期格式仅返回lambda对象如何解决
问题修复与正确实现
现有代码核心错误
- 仅定义了lambda函数但未传入参数调用,所以打印输出的是函数对象本身而非执行结果
strptime的格式字符串配置错误:原日期格式为%Y-%m-%d(四位数年份、横杠分隔),你写的%y-%m,%d匹配的是两位数年份、逗号分隔月日,和实际格式完全不匹配- 列表推导式遍历的
range(host_since.shape[0])拿到的是索引值,没有用索引提取host_since中的实际日期数据 np.datetime64类型无法直接传给strptime处理,需要先转换为Python原生datetime类型或者字符串类型
推荐实现方案
方案1:numpy向量化操作(性能最优,无需手动循环)
import numpy as np # 原有数据读取代码保持不变 host_since = npListings[:,4].astype(np.datetime64) # 先转为字符串格式,再重组为目标日期格式 host_since_str = np.datetime_as_string(host_since, unit='D') host_since_formatted = np.array([f"{d.split('-')[2]}.{d.split('-')[1]}.{d.split('-')[0]}" for d in host_since_str])
方案2:遍历转换(逻辑更直观)
from datetime import datetime import numpy as np host_since = npListings[:,4].astype(np.datetime64) # 先将numpy datetime64批量转为Python原生datetime对象 host_since_py = host_since.tolist() # 遍历转换格式后转回numpy数组 host_since_formatted = np.array([d.strftime('%d.%m.%Y') for d in host_since_py]) print(host_since_formatted)
输出示例:
['24.09.2008' '02.12.2009' '20.11.2009' '23.03.2010' '13.05.2010' '13.05.2010' '25.05.2010' '23.07.2010' '22.12.2009' '08.08.2010']
内容的提问来源于stack exchange,提问作者Test
相关产品推荐
相关产品推荐

