我制作了一个包含三个日期列的文件:
pd.DataFrame({'yyyymm':[199501],'yyyy':[1995],'mm':[1],'Address':['AL1'],'Number':[12]})
yyyymm yyyy mm Address Number
0 199501 1995 1 AL1 12
并将其保存为文件:
df.to_csv('complete.csv')
我使用以下命令读取文件:
df=pd.read_csv('complete.csv')
,我的3个日期列将转换为int的日期,而不是日期。
我试图通过以下方式将它们转换回日期:
df['yyyymm']=df['yyyymm'].astype(str).dt.strftime('%Y%m')
df['yyyy']=df['yyyy'].dt.strftime('%Y')
df['mm']=df['mm'].dt.dtrftime('%m')
出现错误:
AttributeError: Can only use .dt accessor with datetimelike values
很奇怪,因为我用来创建datetime列的命令是:
df['yyyymm']=df['col2'].dt.strftime('%Y%m')
我想念什么吗?如何将6位数的列转换回yyyymm日期时间,将4位数的列转换成yyyy datetime,将mm位数的列转换回到datetime?
答案 0 :(得分:1)
列yyyymm
和yyyy
和mm
是整数。通过使用.astype(str)
,您可以将它们转换为字符串。但是字符串没有.dt
。
您可以使用pd.to_datetime(..)
[pandas-doc]将其转换为日期时间对象:
df['yyyymm'] = pd.to_datetime(df['yyyymm'].astype(str), format='%Y%m')
实际上,这给了我们
>>> pd.to_datetime(df['yyyymm'].astype(str), format='%Y%m')
0 1995-01-01
Name: yyyymm, dtype: datetime64[ns]
对于yyyy
和mm
列也可以这样做:
>>> pd.to_datetime(df['yyyy'].astype(str), format='%Y')
0 1995-01-01
Name: yyyy, dtype: datetime64[ns]
>>> pd.to_datetime(df['mm'].astype(str), format='%m')
0 1900-01-01
Name: mm, dtype: datetime64[ns]