FaC*_*fee 3 python datetime timestamp date pandas
我有以下数据帧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
Run Code Online (Sandbox Code Playgroud)
我想创建一个新列df['Date'],其中year,根据格式组合month,和day列yyyy-m-d.
在这篇文章后,我做了:
`df['Date']=pd.to_datetime(df['year']*10000000000
+df['month']*100000000
+df['day']*1000000,
format='%Y-%m-%d%')`
Run Code Online (Sandbox Code Playgroud)
结果不是我所期望的,因为它从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
Run Code Online (Sandbox Code Playgroud)
由于日期应该是2004-1-2格式,我做错了什么?
有一种更简单的方法:
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
Run Code Online (Sandbox Code Playgroud)
来自docs:
从DataFrame的多个列组装日期时间.这些密钥可以是常见缩写如[
year,month,day,minute,second,ms,us,ns])或相同的复数
一种解决方案是将这些列转换为字符串,使用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
Run Code Online (Sandbox Code Playgroud)
errors='coerce'如果列之间的日期时间组合无效,您可能还想添加一个参数。
| 归档时间: |
|
| 查看次数: |
1192 次 |
| 最近记录: |