当前位置: 首页 > 面试题库 >

如何将年,月和日列合并为单个datetime列?

漆雕皓轩
2023-03-14
问题内容

我有以下数据框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'],其中yearmonthday列按照格式结合yyyy-m-d

我做了:

`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格式,我在做什么错?


问题答案:

有一个更简单的方法:

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的多个列中组合一个日期时间。这些密钥可以像常见缩写[ yearmonthdayminute
secondmsusns])或相同的复数



 类似资料:
  • 问题内容: 我有 我想要 问题答案:

  • 我有一个日值(1-31)、一个月值(1-12)和一个年值,我需要将它们保存为我的MySQL数据库日期格式。 如何将这些值(对应于日、月和年的3个整数)转换为日期格式以将其保存到数据库中?

  • 问题内容: 我在sql server中有一个datetime列及其可选字段,如果用户决定不输入,那么我想在表中插入NULL值,并定义如下内容: 当我插入sql server时,我在asp.net中有此代码 但问题是:其插入 在SQL表而不是 我在这里做错了什么? 更新: 问题答案: 假设您有: 如果您想插入SQL NULL,那么您应该下一步: 意思是: 如果要在函数中注意可空的datetime,则

  • 问题:我如何将年和月数据合并为一个MM/DD/YYYY日期,而不将数字类型转换为字符类型? 我有需要读入SAS的日期数据。它分为两栏:年和月。数据看起来如下所示: 我通过以下方式实现了这一点: 但是,日志给出了以下说明: 注意:数值已在:(行):(列)给出的位置转换为字符值。 虽然上面的代码充分解决了我的问题,但注释暗示不应该以这种方式(通过类型转换)处理日期格式。

  • 我有像“2020年4月20日”这样的字符串。我想将字符串转换为DateTime()。 我面临的问题是DateTime.parse()不接受月份名称。

  • ECMA-262 语言规范第 21.4.1.15.1 段详细介绍了扩展年份日期格式 引述: 21.4.1.15.1 扩展年份 涵盖1970年1月1日(21.4.1.1)前后约273,790年的全时值范围需要表示0之前或9999之后的年份。ISO 8601允许扩展年份表示。 在简化的ECMAScript格式中,这种扩展的年份表示应具有6位数字,并且始终以或符号作为前缀。0年被视为正,因此以符号作为前