在Python中,将datetime
对象转换为date
对象通常是一个简单的操作,但如果你遇到错误“不可散列的类型:'numpy.ndarray'”,这通常意味着你在处理的是一个NumPy数组,而不是单个datetime
对象。
以下是一些常见的场景和解决方法:
datetime
对象如果你只是处理单个datetime
对象,可以直接使用datetime.date()
方法:
from datetime import datetime
# 示例 datetime 对象
dt = datetime.now()
# 转换为 date 对象
date_obj = dt.date()
print(date_obj)
datetime
列如果你在处理一个Pandas DataFrame,并且需要将datetime
列转换为date
列,可以使用pandas
的dt.date
属性:
import pandas as pd
# 示例 DataFrame
data = {'datetime_col': [pd.Timestamp('2023-01-01 12:00:00'), pd.Timestamp('2023-01-02 13:00:00')]}
df = pd.DataFrame(data)
# 转换为 date 列
df['date_col'] = df['datetime_col'].dt.date
print(df)
datetime
对象如果你在处理一个包含datetime
对象的NumPy数组,可以使用numpy.vectorize
来应用datetime.date()
方法:
import numpy as np
from datetime import datetime
# 示例 NumPy 数组
dt_array = np.array([datetime(2023, 1, 1, 12, 0, 0), datetime(2023, 1, 2, 13, 0, 0)])
# 使用 numpy.vectorize 转换为 date 数组
date_array = np.vectorize(lambda x: x.date())(dt_array)
print(date_array)
datetime
对象如果你在处理一个包含datetime
对象的列表,可以使用列表推导式来转换:
from datetime import datetime
# 示例列表
dt_list = [datetime(2023, 1, 1, 12, 0, 0), datetime(2023, 1, 2, 13, 0, 0)]
# 转换为 date 列表
date_list = [dt.date() for dt in dt_list]
print(date_list)
领取专属 10元无门槛券
手把手带您无忧上云