【问题标题】:Python x days y hrs z mins to datePython x 天 y 小时 z 分钟至今
【发布时间】:2023-03-31 21:33:01
【问题描述】:

我有一个带有以下值的熊猫数据框:

tx['Age']
0             7 mins ago
1             8 mins ago
2            12 mins ago
3            14 mins ago
4            15 mins ago
5      9 hrs 21 mins ago
6     11 hrs 13 mins ago
7     11 hrs 13 mins ago
8     11 hrs 14 mins ago
9     11 hrs 15 mins ago
10       1 day 3 hrs ago
11       1 day 3 hrs ago
12       1 day 3 hrs ago
13       1 day 3 hrs ago
14       1 day 3 hrs ago
15       1 day 3 hrs ago
16       1 day 3 hrs ago
17       1 day 3 hrs ago
18       1 day 3 hrs ago
19       1 day 3 hrs ago
20       1 day 4 hrs ago
21     2 days 12 hrs ago
22     2 days 14 hrs ago
23     2 days 14 hrs ago
24     2 days 22 hrs ago
Name: Age, dtype: object

我想将此列转换为日期。 有什么想法吗?

谢谢!

【问题讨论】:

  • 到什么日期? 1800-12-31?
  • date = dt.datetime.now() - dt.timedelta(days=1, hours=3, minutes=11, seconds=44) 现在您只需要从 df 中提取值。我的建议是将一列分成天、小时、秒等列,并在没有班次的地方放置 0。然后可以将其全部作为向量操作来完成

标签: python-3.x pandas datetime


【解决方案1】:

您的问题有两个部分。首先,提取天、小时和分钟,并用零替换缺失的部分:

pattern = r"(?:(\d+) days?)? ?(?:(\d+) hrs?)? ?(?:(\d+) mins?)?"
parts = df['Age'].str.extract(pattern).fillna(0).astype(int)

其次,将天、小时和分钟转换为分钟,并将分钟提供给TimedeltaIndex 构造函数:

minutes = ((parts[0] * 24 + parts[1]) * 60 + parts[2]).astype(str)
-pd.TimedeltaIndex("00:" + minutes + ":00")

注意“减号”:它的意思是“以前”。结果是Timedelta。要使其成为日期,您必须将其添加到某个参考日期。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    相关资源
    最近更新 更多