【问题标题】:python pandas: remove part of date time object (datetime64[ns])python pandas:删除日期时间对象的一部分(datetime64 [ns])
【发布时间】:2018-09-26 12:53:47
【问题描述】:

我有一个 pandas 数据框,我正在尝试删除日期时间列的日期和时间部分(即只保留年份和月份部分)。我做了以下事情:

df['my_date_new'] = pd.to_datetime(df['my_date'].dt.year, df['my_date'].dt.month, 0)

但出现以下错误:TypeError: invalid type comparison

我在这里做错了什么,我该如何解决这个问题?

【问题讨论】:

  • 当你说删除时,你的意思是你只想要一个字符串吗?代表月份的期间?还是某个月的结束/开始日期?
  • 如果以下解决方案之一解决了您的问题,请考虑接受(左侧绿色勾号),或随时要求澄清。

标签: python python-2.7 pandas datetime


【解决方案1】:

这是不可能的。您不能从 datetime 对象中删除日期和时间。

您可以重置它们,例如将它们重置为 day = 1 或 time = 0,但您不能删除它们。

就像在现实生活中一样。


可以做的是将您的一天重置为 1,将时间重置为 00:00:00。因此,具有相同年份和月份的 datetime 对象输入被修改,以便它们对齐。

来自@piRSquared 的数据。

df = pd.DataFrame(dict(my_date=pd.date_range('now', periods=4, freq='15D')))

print(df)

#                      my_date
# 0 2018-04-16 22:27:47.373127
# 1 2018-05-01 22:27:47.373127
# 2 2018-05-16 22:27:47.373127
# 3 2018-05-31 22:27:47.373127

df['my_date'] = df['my_date'].apply(lambda x: x.replace(day=1)).dt.normalize()

print(df)

#      my_date
# 0 2018-04-01
# 1 2018-05-01
# 2 2018-05-01
# 3 2018-05-01

【讨论】:

  • 但是您可以将它们设置为01 以使2018-04-16 10:30:00.0000002018-04-01 12:15:00.000000 相同,从而有效地从日期和时间区域中删除信息。 \
  • 但它们根本没有被删除。刚刚标准化。您不能删除这些属性。
  • 但是您的回答没有帮助。当 OP 不需要完成一些不可能完成的事情时,简单地说“这是不可能的”是没有帮助的。他/她需要一种方法来规范化日期时间对象。考虑@piRSquared 的评论
  • @ChootsMagoots,很公平,我希望 OP 改写他的问题。就目前而言,我对 Q 部分的问答感到不舒服。
  • 我不反对。这种问题已经在 stackoverflow 上被问过 12 次,格式略有不同。 IMO 最好选择提供帮助或将其标记为重复并继续。
【解决方案2】:

考虑示例df

df = pd.DataFrame(dict(my_date=pd.date_range('now', periods=4, freq='15D')))

df

                     my_date
0 2018-04-16 10:39:16.218988
1 2018-05-01 10:39:16.218988
2 2018-05-16 10:39:16.218988
3 2018-05-31 10:39:16.218988

这里有一些例子

df.assign(
    Period=df.my_date.dt.to_period('M'),
    String=df.my_date.dt.strftime('%Y-%m'),
    NewDate=pd.to_datetime(df.my_date.dt.strftime('%Y-%m-01'))
)

                     my_date  Period   String    NewDate
0 2018-04-16 10:39:16.218988 2018-04  2018-04 2018-04-01
1 2018-05-01 10:39:16.218988 2018-05  2018-05 2018-05-01
2 2018-05-16 10:39:16.218988 2018-05  2018-05 2018-05-01
3 2018-05-31 10:39:16.218988 2018-05  2018-05 2018-05-01

【讨论】:

    猜你喜欢
    • 2020-08-20
    • 2021-08-01
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多