首页 > 解决方案 > AttributeError:当使用数据框处理时间时,只能使用具有 datetimelike 值的 .dt 访问器

问题描述

test.csv 中的数据如下:

device_id,upload_time
id1,2020-06-01 07:46:30+00:00
id2,2020-06-05 16:04:32+00:00

当我使用此代码添加数据框列时。

import pandas as pd

df = pd.read_csv(r'E:/test.csv',parse_dates=[1], encoding='utf-8')
df['new_upload_time'] = df['upload_time'] + pd.Timedelta(hours=8) #add 8 hours
df['new_upload_time'] = df['new_upload_time'].dt.strftime('%Y-%m-%d %H:%M:%S')
df['upload_time_year_month'] = df['new_upload_time'].dt.strftime('%Y%m')
df.to_csv(r'E:/result.csv', index=False, mode='w', header=True)

错误信息是:

AttributeError:只能将 .dt 访问器与 datetimelike 值一起使用

如何解决?

标签: pythonpandasdataframedatetime

解决方案


问题是这样的声明:

df['new_upload_time'] = df['new_upload_time'].dt.strftime('%Y-%m-%d %H:%M:%S')

当您运行上述内容时,您将datetimecolumn 转换为object. 因此,当您使用.dt它时,它会失败。

您可以像这样更改语句的顺序,它将起作用:

df = pd.read_csv(r'E:/test.csv',parse_dates=[1], encoding='utf-8')
df['new_upload_time'] = df['upload_time'] + pd.Timedelta(hours=8) #add 8 hours
df['upload_time_year_month'] = df['new_upload_time'].dt.strftime('%Y%m')
df['new_upload_time'] = df['new_upload_time'].dt.strftime('%Y-%m-%d %H:%M:%S')
df.to_csv(r'E:/result.csv', index=False, mode='w', header=True)

推荐阅读