【问题标题】:Faster way of creating a datetime column from existing date and time columns in Pandas Dataframe从 Pandas Dataframe 中的现有日期和时间列创建日期时间列的更快方法
【发布时间】:2018-11-05 02:21:41
【问题描述】:

我有一个带有年、月、日和时间列的 Pandas 数据框,我试图将它们组合成一个只有一个日期时间对象的新列。每列中的数据类型是一个 int,包括时间列(它在 1 到 2359 之间)。例如:2015, 3, 15, 745 将是 2015 年 3 月 15 日上午 7:45。

我目前只是这样做,但在我的有 58000 行的数据帧上运行需要几分钟:

for i in range(len(flights.index)):
    flights['SCHEDULED_DEPARTURE_DATETIME'][i] = datetime.datetime(
        flights.iloc[i]['YEAR'], 
        flights.iloc[i]['MONTH'], 
        flights.iloc[i]['DAY'], 
        int(np.floor(flights.iloc[i]['SCHEDULED_DEPARTURE']/100)), #hours
        flights.iloc[i]['SCHEDULED_DEPARTURE']%100                 #minutes
    ) 

必须有一种更快、更 Pythonic 的方式来执行此操作,但我似乎无法让它与 apply 一起使用。我错过了什么?

仅供参考,我的数据框是来自 Kaggle 的该数据集的一小部分:https://www.kaggle.com/usdot/flight-delays#flights.csv

【问题讨论】:

    标签: python pandas datetime dataframe apply


    【解决方案1】:

    你可以像这样使用pd.to_datetime()

    import pandas as pd
    import numpy as np
    
    data = pd.DataFrame(np.array(
        [
            [2018, 10, 1, 2359],
            [2018, 10, 1, 1500],
            [2018, 10, 1, 900],
            [2018, 10, 1, 1],
            [2018, 10, 1, 0]
        ]
    ), columns = ['year', 'month', 'day', 'scheduled_departure'])
    
    data['hour'] = np.floor(data['scheduled_departure'] / 100)
    
    data['minute'] = data['scheduled_departure'] % 100
    
    data['scheduled_departure_datetime'] = pd.to_datetime(data[['year', 'month', 'day', 'hour', 'minute']])
    
    print(data['scheduled_departure_datetime'])
    

    给予:

    0   2018-10-01 23:59:00
    1   2018-10-01 15:00:00
    2   2018-10-01 09:00:00
    3   2018-10-01 00:01:00
    4   2018-10-01 00:00:00
    Name: scheduled_departure_datetime, dtype: datetime64[ns]
    

    我没有测试过速度,但我想这会更快。

    【讨论】:

      猜你喜欢
      • 2018-09-16
      • 1970-01-01
      • 2022-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-30
      • 2018-02-23
      • 2015-08-19
      相关资源
      最近更新 更多