【问题标题】:How can I combine datetime.date and datetime.time columns in pandas dataframe?如何在 pandas 数据框中组合 datetime.date 和 datetime.time 列?
【发布时间】:2018-01-22 17:26:00
【问题描述】:

给定df

          Date      Time    Data     
3   2017-08-10  15:15:00    a    
0   2017-08-11  15:15:00    b    
1   2017-08-12  15:15:00    c    
2   2017-08-13  15:15:00    d    
1   2017-08-14  15:15:00    e    

print (type(df['Date'].iat[0]))
<class 'datetime.date'>

print (type(df['Time'].iat[0]))
<class 'datetime.time'>

如何将 df.Date 和 df.Time 组合到作为日期时间对象的 DateTime 列中??:

        Date        Time    Data  DateTime   
3   2017-08-10  15:15:00    a     2017-08-10 15:15:00
0   2017-08-11  15:15:00    b     2017-08-11 15:15:00
1   2017-08-12  15:15:00    c     2017-08-12 15:15:00
2   2017-08-13  15:15:00    d     2017-08-13 15:15:00
1   2017-08-14  15:15:00    e     2017-08-14 15:15:00

我尝试了什么:

df['DateTime'] = df.apply(lambda r : pd.datetime.combine(r['Date'],r['Time']),1)

这按预期效果很好,但是,我更喜欢矢量化操作,我得到以下消息:

C:\Users\User\Anaconda3\lib\site-packages\ipykernel\__main__.py:1: 
SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame.
Try using .loc[row_indexer,col_indexer] = value instead

See the caveats in the documentation: http://pandas.pydata.org/pandas-
docs/stable/indexing.html#indexing-view-versus-copy
if __name__ == '__main__':

【问题讨论】:

    标签: python python-3.x pandas datetime dataframe


    【解决方案1】:

    这里的问题是日期和时间都已经是日期时间格式。试试看

    df['datetime'] = pd.to_datetime(df['Date'].dt.strftime('%Y-%m-%d') + df['Time'].astype(str), format = '%Y-%m-%d%H:%M:%S')
    

    虽然我不知道它是否比使用 datetime.combine 更有效

    【讨论】:

    • 我之前试过这个,但我得到:“TypeError: unsupported operand type(s) for +: 'datetime.date' and 'str'”
    • 我测试过了,它的工作原理,你是什么版本的?您也可以尝试我添加的替代方法
    • 替代版本给了我这个:TypeError: unsupported operand type(s) for +: 'datetime.date' and 'datetime.time'
    • 版本熊猫 0.19.2
    • 对不起,我错过了列已经是日期时间格式的部分。请查看更改。
    【解决方案2】:

    我迟到了......如果“日期”是一个类似日期时间的对象,Vaishali 的答案有效。

    str(date) 会给出yyyy-mm-dd 输出according to docs,所以你可以这样做:

    pd.to_datetime(df['Date'].astype(str) + df['Time'].astype(str), format = '%Y-%m-%d%H:%M:%S')
    

    但是,我没有测试过这个速度。

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 2018-03-17
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2017-06-06
      • 2018-11-24
      • 2018-09-04
      • 2015-11-11
      相关资源
      最近更新 更多