我有一个包含许多列的数据框,其中一列(接收时间)已正确转换为日期时间
id receivedtime
1 2020-09-08 00:35:12
2 2020-09-09 06:16:09
3 2020-09-10 12:47:04
4 2020-09-08 15:57:05
,依此类推。我只想选择给定日期的那些(这类似于此帖子:subsets from a datetime column,但对我没有帮助)。我尝试做一个简单的子贴标:
df[df["receivedtime"]=="2020-09-10"]
但是我得到了一个空的数据框。我相信这与小时和分秒有关。显然,一种方法是从日期时间中删除该信息,但我想保留整个结构。我什至尝试使用dt.datetime,但似乎没有任何效果。这里有什么问题?
感谢您的帮助。
答案 0 :(得分:1)
这是因为您的receivedtime
并不总是很短的日期,即时间等于00:00:00
。尝试使用dt.normalize()
来获取时间戳中的日期:
df[df["receivedtime"].dt.normalize()=="2020-09-10"]
输出:
id receivedtime
2 3 2020-09-10 12:47:04
答案 1 :(得分:1)
您可以尝试通过以下方法将日期时间转换为日期
df[pd.to_datetime(df["receivedtime"]).dt.strftime('%Y-%m-%d')=="2020-09-10"]
答案 2 :(得分:1)
首先通过在空白处分割日期来创建“新”数据框
new = df["receivedtime"].str.split(" ", expand = True)
new
输出
0 1
0 2020-09-08 00:35:12
1 2020-09-09 06:16:09
2 2020-09-10 12:47:04
3 2020-09-08 15:57:05
然后使用布尔蒙版
df[new[0]=="2020-09-08"]
输出:
receivedtime
0 2020-09-08 00:35:12
3 2020-09-08 15:57:05
您将获得带日期的所有日期