python pandas:删除部分日期时间对象(datetime64 [ns])

时间:2018-04-16 17:33:02

标签: python python-2.7 pandas datetime

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

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

但收到以下错误:TypeError: invalid type comparison

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

2 个答案:

答案 0 :(得分:1)

考虑示例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

答案 1 :(得分:0)

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

您可以重置它们,例如日期= 1或时间= 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