如何将dask_cudf列转换为datetime类型?
如何将dask_cudf中字符串或纳秒格式的列转换为datetime对象?
pandas和cudf均提供to_datetime方法实现时间格式转换,以下是示例代码:
import pandas as pd import cudf # pandas实现 df = pd.DataFrame( {'city' : ['Dallas','Bogota','Chicago','Juarez'], 'timestamp' : [1664828099973725440,1664828099972763136,1664828094775313920,1664828081313273856]}) df['datetime'] = pd.to_datetime(df['timestamp']) # cudf实现 cdf = cudf.DataFrame( {'city' : ['Dallas','Bogota','Chicago','Juarez'], 'timestamp' : [1664828099973725440,1664828099972763136,1664828094775313920,1664828081313273856]}) cdf['datetime'] = cudf.to_datetime(cdf['timestamp']) print(df) print(cdf)
两种方式的执行结果一致:
city timestamp datetime 0 Dallas 1664828099973725440 2022-10-03 20:14:59.973725440 1 Bogota 1664828099972763136 2022-10-03 20:14:59.972763136 2 Chicago 1664828094775313920 2022-10-03 20:14:54.775313920 3 Juarez 1664828081313273856 2022-10-03 20:14:41.313273856
错误的dask处理方式
若直接使用dask.dataframe的dd.to_datetime()处理dask_cudf对象会报错,比如以下代码:
import dask_cudf from dask import dataframe as dd ddf = dask_cudf.from_cudf(cdf, npartitions=2) # 此代码会报错,因为dd.to_datetime不兼容dask_cudf分区 dd.to_datetime(ddf['timestamp']).head()
正确的dask_cudf转换方式
dask_cudf提供了适配GPU的dask_cudf.to_datetime()方法,可直接处理纳秒格式或字符串格式的时间列,同时支持从批量CSV文件加载数据并转换:
1. 从批量CSV创建dask_cudf并转换纳秒格式列
import dask_cudf # 从同目录下所有CSV文件创建dask_cudf ddf = dask_cudf.read_csv("*.csv") # 将纳秒timestamp列转换为datetime类型 ddf['datetime'] = dask_cudf.to_datetime(ddf['timestamp']) # 查看转换结果 print(ddf[['timestamp', 'datetime']].head())
2. 转换字符串格式的时间列
如果时间列是字符串格式,可通过format参数指定解析格式:
# 假设str_timestamp列格式为"YYYY-MM-DD HH:MM:SS" ddf['datetime'] = dask_cudf.to_datetime(ddf['str_timestamp'], format='%Y-%m-%d %H:%M:%S')
注意:dask_cudf的
to_datetime()方法参数与cudf、pandas的to_datetime()基本一致,支持unit、format等常用参数,可根据实际需求调整。
内容的提问来源于stack exchange,提问作者dleal
相关产品推荐
相关产品推荐

