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



我有一个熊猫数据帧,我正在尝试删除日期时间列的日期和时间部分(即只保留年份和月份部分(。我做了以下工作:

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

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

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

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

是不可能的。不能从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

最新更新