【问题标题】:How to get a new date from two date(hour) columns如何从两个日期(小时)列中获取新日期
【发布时间】:2022-01-25 13:29:25
【问题描述】:

我有一个数据框,其中包含一个日期时间列和一个更改日期列。 示例:

    obdate      cdate
0   2015-01-04  11
0   2016-03-20  7
0   2017-07-15  14d20h
0   2017-12-14  12

我需要一个基于cdate 列的新日期时间列。 示例:

    obdate      cdate     newdate
0   2015-01-04  11        2015-01-04 11:00:00
0   2016-03-20  7         2016-03-20 07:00:00
0   2017-07-15  14d20h    2017-07-14 20:00:00
0   2017-12-14  12        2017-12-14 12:00:00  

我该怎么做?

【问题讨论】:

  • 你尝试了什么?你的代码在哪里?您可以使用df.apply(your_function, axis=1) 为每一行运行your_function(row),这个your_function 可以使用标准模块datetime 来创建带有时间的日期。或者你可以为此使用普通的字符串函数。
  • 请提供足够的代码,以便其他人更好地理解或重现问题。

标签: python datetime


【解决方案1】:

您可以使用df.apply(your_function, axis=1) 为每个row 运行your_function(row),并且此your_function 可以使用标准模块datetime 创建带有时间的日期。或者它可以为此使用普通的字符串函数。


我只使用io.StringIO 来模拟内存中的文件。

text ='''obdate      cdate
2015-01-04  11
2016-03-20  7
2017-07-15  14d20h
2017-12-14  12'''

import pandas as pd
#import datetime
import io

df = pd.read_csv(io.StringIO(text), sep='\s+')

def function(row):
    date = row['obdate']
    try:
        hour = int(row['cdate'])
        return f"{date} {hour:02}:00:00"
    except ValueError:
        date = date[:-2]  # skip day in `date`
        day, hour = row['cdate'].split('d')
        hour = hour[:-1]  # skip `h`
        day  = int(day)
        hour = int(hour)
        return f"{date}{day:02} {hour:02}:00:00"

df['newdate'] = df.apply(function, axis=1)

print(df)

结果:

       obdate   cdate              newdate
0  2015-01-04      11  2015-01-04 11:00:00
1  2016-03-20       7  2016-03-20 07:00:00
2  2017-07-15  14d20h  2017-07-14 20:00:00
3  2017-12-14      12  2017-12-14 12:00:00

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-23
    • 2018-06-18
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2010-10-05
    • 2020-08-16
    相关资源
    最近更新 更多