【问题标题】:Concatenate two datetimes into a string date range将两个日期时间连接成一个字符串日期范围
【发布时间】:2015-02-11 21:25:01
【问题描述】:

我有一个熊猫数据框。

Data = pd.DataFrame([[datetime.datetime(2014,1,1),datetime.datetime(2014,1,3)]],columns=['date1','date2')

该数据框有两个日期时间列 date1 和 date2。

我想创建一个包含以下格式的字符串的新列:

'1/1/2014 - 1/3/2014'

现在我有这个设置来创建新列,但它保留了尾随的 hms

Data['range'] = Data.apply(lambda x:'%s - %s' % (x['date1'],x['date2']),axis=1)

发现很难仅删除日期,因为我使用的是两列而不是两个值。有什么指点吗?

【问题讨论】:

  • 您的数据示例会很有用。你所说的“很难找到”是什么意思?你得到任何错误,或不正确的结果?任何示例都会很有用。
  • “很难找到”我的意思是 x['datex'] 上的 strptime 不起作用,因为这些是系列而不是值,我不能将它应用于“lambda”中的 x x" 或使用 %Y%M%d 代替 %s。例如 date1 = datetime.datetime(2014,1,1) 和 date2 = datetime.datetime(2014,1,3)。

标签: python string datetime pandas concat


【解决方案1】:

我认为这应该会有所帮助:

import pandas as pd
from datetime import datetime

Data = pd.DataFrame([[datetime(2014,1,1),
                      datetime(2014,1,3)]],
                      columns=['date1','date2'])

# 
Data['range'] = Data.apply(lambda x:'%s - %s' %
                             (x['date1'].to_pydatetime().strftime("%d/%m/%Y"),
                              x['date2'].to_pydatetime().strftime("%d/%m/%y")),
                             axis=1)       

print(Data)      

结果是:

       date1      date2
0 2014-01-01 2014-01-03
       date1      date2                  range
0 2014-01-01 2014-01-03  01/01/2014 - 03/01/14

【讨论】:

  • 这很好,但另一个答案更简洁一些。感谢您的帮助!
【解决方案2】:

发现很难去掉日期,因为我使用的是两列而不是两个值

好吧,既然您已经在使用apply,那么您正在处理两个值(不是列),因此您可以在每个值上调用date 方法:

Data.apply(
    lambda x: '%s - %s' % ( xdate1.date() , x.date2.date() ),
    axis=1)

传递给 lambda 函数的 x 是数据帧的单行,因此访问 x.date1(或 x['date1'])会给出 Timestamp 类型的单个值。从中提取日期很容易。

【讨论】:

  • 光滑。还不知道 .date() 函数,所以这可能会对我有所帮助。非常感谢!
猜你喜欢
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
相关资源
最近更新 更多