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