将6位数的int转换为熊猫的yyyymm

时间:2019-11-10 22:24:33

标签: pandas datetime

我制作了一个包含三个日期列的文件:

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?

1 个答案:

答案 0 :(得分:1)

yyyymmyyyymm整数。通过使用.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]

对于yyyymm列也可以这样做:

>>> 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]