我有一个pandas数据框,我正在尝试删除日期时间列的日期和时间部分(即仅保留年份和月份部分)。我做了以下事情:
df['my_date_new'] = pd.to_datetime(df['my_date'].dt.year, df['my_date'].dt.month, 0)
但收到以下错误:TypeError: invalid type comparison
我在这里做错了什么,如何解决这个问题?
答案 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