【问题标题】:Replace a list of timestamps in a pandas dataframe with a list of our for every timestamp in every row将 pandas 数据框中的时间戳列表替换为每行中每个时间戳的列表
【发布时间】:2018-04-02 19:29:59
【问题描述】:

我在 pandas 数据框中有一列,其中包含包含时间戳的列表。我想用每行的每个时间戳的小时列表替换这个时间戳列表。下面是一个例子

df = pd.DataFrame( {'id':[1,2], 'time':[ [2017-09-05 03:34:51,2016-03-07 05:24:55], [2016-02-06 03:14:21,2014-08-09 09:12:44, 2011-05-02 07:43:21] ] }) 

我想要一个名为“小时”的新列

df['hour'] = [ [3,5], [3,9,7] ]

我使用 map() 和 apply() 尝试了不同的功能,但没有产生预期的结果,非常感谢任何帮助。

【问题讨论】:

    标签: python pandas timestamp time-series


    【解决方案1】:

    使用apply + to_datetime。

    s = df.time.apply(lambda x: pd.to_datetime(x, errors='coerce').hour.tolist() )
    s
    
    0       [3, 5]
    1    [3, 9, 7]
    Name: time, dtype: object
    
    df['hour'] = s
    df
    
       id                                               time       hour
    0   1         [2017-09-05 03:34:51, 2016-03-07 05:24:55]     [3, 5]
    1   2  [2016-02-06 03:14:21, 2014-08-09 09:12:44, 201...  [3, 9, 7]
    

    法定警告,这通常是低效的,因为您有一列列表。


    如果你想知道我将如何存储这些数据,它会是这样的:

    df
    
       id                 time
    0   1  2017-09-05 03:34:51
    1   1  2016-03-07 05:24:55
    2   2  2016-02-06 03:14:21
    3   2  2014-08-09 09:12:44
    4   2  2011-05-02 07:43:21
    

    现在,获取时间很简单:

    h = pd.to_datetime(df.time).dt.hour
    h
    
    0    3
    1    5
    2    3
    3    9
    4    7
    Name: time, dtype: int64
    
    df['hour'] = h
    

    如果你想进行分组计算,你总是可以使用df.groupby。

    【讨论】:

    • 非常感谢@COLDSPEED,它运行良好。您是说一列列表效率低下,那么为每个用户保存这么多信息的最佳方法是什么?假设我正在收集不同用户对网站的访问时间,其中一些用户有 1000 次访问,而其他用户只有 5 次访问,例如,如果我将每个访问时间戳保存在一个新列中,我将有 1000 个列仅用于时间戳和一些用户这些列将是空的,我认为这是非常低效的。取决于此用户访问该站点的 mqny 次。如果您有更好的想法,请告诉我。再次感谢
    • 这就是为什么我选择将每个用户的所有时间戳保存在一个列表中,而不是长度为 5 或 1000
    • @MartinHeusen 看我的编辑,真的很简单。另外,一个经验法则——您将如何将这些数据存储在 SQL 表中?当然你不能在那里存储列表和元组。
    • @MartinHeusen 最后一件事。如果这个答案有帮助,smash that accept button.
    • 再次感谢。有趣的是,我的原始数据采用了您提到的格式(双索引),但随后我使用 groupby() 将每个用户的所有数据放在一行中,因为我正在执行 ML 聚类,当每个用户对数据进行分组时会产生最佳结果。无论如何,它帮助了很多。我也按下了接受按钮 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-13
    • 2013-11-15
    • 2020-06-16
    • 2011-01-25
    • 1970-01-01
    • 2019-08-20
    • 2017-08-26
    相关资源
    最近更新 更多