我有以下数据框df
:
id lat lon year month day
0 381 53.30660 -0.54649 2004 1 2
1 381 53.30660 -0.54649 2004 1 3
2 381 53.30660 -0.54649 2004 1 4
我想创建一个新列df['Date']
,其中year
,month
和day
列根据格式yyyy-m-d
进行组合。< / p>
关注this post,我做了:
`df['Date']=pd.to_datetime(df['year']*10000000000
+df['month']*100000000
+df['day']*1000000,
format='%Y-%m-%d%')`
结果不是我所期望的,因为它从1970年而不是2004年开始,它还包含小时标记,我没有指明:
id lat lon year month day Date
0 381 53.30660 -0.54649 2004 1 2 1970-01-01 05:34:00.102
1 381 53.30660 -0.54649 2004 1 3 1970-01-01 05:34:00.103
2 381 53.30660 -0.54649 2004 1 4 1970-01-01 05:34:00.104
由于日期应该是2004-1-2
格式,我做错了什么?
答案 0 :(得分:7)
有一种更简单的方法:
In [250]: df['Date']=pd.to_datetime(df[['year','month','day']])
In [251]: df
Out[251]:
id lat lon year month day Date
0 381 53.3066 -0.54649 2004 1 2 2004-01-02
1 381 53.3066 -0.54649 2004 1 3 2004-01-03
2 381 53.3066 -0.54649 2004 1 4 2004-01-04
来自docs:
从DataFrame的多个列组装日期时间。按键 可以是常见缩写,例如[
year
,month
,day
,minute
,second
,ms
,us
,ns
])或复数
答案 1 :(得分:3)
一种解决方案是将这些列转换为字符串,使用agg
+ str.join
进行连接,然后转换为datetime
。
df['Date'] = pd.to_datetime(
df[['year', 'month', 'day']].astype(str).agg('-'.join, axis=1))
df
id lat lon year month day Date
0 381 53.3066 -0.54649 2004 1 2 2004-01-02
1 381 53.3066 -0.54649 2004 1 3 2004-01-03
2 381 53.3066 -0.54649 2004 1 4 2004-01-04
如果您的列之间的日期时间组合无效,则可能还需要添加errors='coerce'
参数。
答案 2 :(得分:3)
修复您的代码
df['Date']=pd.to_datetime(df.year*10000+df.month*100+df.day,format='%Y%m%d')
df
Out[57]:
id lat lon year month day Date
0 381 53.3066 -0.54649 2004 1 2 2004-01-02
1 381 53.3066 -0.54649 2004 1 3 2004-01-03
2 381 53.3066 -0.54649 2004 1 4 2004-01-04
答案 3 :(得分:1)
我一直在努力寻找解决方案,因为我正在处理带有西班牙语列的数据集。我将它们翻译成“年”,“月”,“天”和“小时”后,转换就完美了