如何在Pandas中获取指定时间范围的数据?
嘿,这事儿不难,我来给你捋清楚怎么用Pandas筛选带时区的时间范围数据,你的数据集已经带了+05:30时区,刚好可以直接处理:
步骤1:将时间数据导入并转换为带时区的datetime类型
首先咱们得把你的时间戳列表转成Pandas的DataFrame,并且确保时间列是带时区感知的datetime类型——这很重要,不然筛选时区数据会出问题。
import pandas as pd # 你的时间戳数据集 timestamps = [ "2018-02-11 17:09:47.211344+05:30", "2018-02-11 17:10:13.553385+05:30", "2018-02-11 17:30:13.58636+05:30", "2018-02-11 18:00:13.630383+05:30", "2018-02-11 18:30:13.558238+05:30", "2018-02-12 03:50:19.298678+05:30", "2018-02-12 04:53:17.187277+05:30", "2018-02-12 05:10:25.443962+05:30", "2018-02-12 05:20:21.591291+05:30", "2018-02-13 06:41:54.234258+05:30", "2018-02-17 07:04:10.662735+05:30", "2018-02-20 05:34:39.855528+05:30" ] # 创建DataFrame并解析时间列(保留原时区) df = pd.DataFrame({"timestamp": timestamps}) df["timestamp"] = pd.to_datetime(df["timestamp"], utc=False)
你可以用df.dtypes检查一下,timestamp列应该显示为datetime64[ns, Asia/Kolkata](因为+05:30对应的是印度时区),这就说明类型正确了。
步骤2:定义和数据时区一致的时间范围
必须保证时间范围的时区和数据列的时区完全一致,不然Pandas会抛出时区不匹配的错误。比如如果你想筛选2018-02-11 17:00到2018-02-12 06:00(+05:30时区)的数据,就这么定义:
# 定义起始和结束时间(带+05:30时区) start_time = pd.to_datetime("2018-02-11 17:00:00+05:30") end_time = pd.to_datetime("2018-02-12 06:00:00+05:30")
步骤3:执行筛选
用布尔索引就能轻松筛选出时间范围内的行,两种写法都可以:
# 写法1:直接用布尔条件 filtered_df = df[(df["timestamp"] >= start_time) & (df["timestamp"] <= end_time)] # 写法2:用loc(更清晰,推荐) filtered_df = df.loc[(df["timestamp"] >= start_time) & (df["timestamp"] <= end_time)]
运行后filtered_df就会包含你要的时间范围内的所有数据条目了。
额外示例:筛选某一天的全部数据
如果想筛选2018-02-12全天(+05:30时区)的数据,可以这么写:
# 定义当天的起始(00:00)和次日的起始(00:00) start_day = pd.to_datetime("2018-02-12 00:00:00+05:30") end_day = pd.to_datetime("2018-02-13 00:00:00+05:30") # 筛选当天数据(注意用< end_day,避免包含次日00:00的条目) filtered_day_df = df.loc[(df["timestamp"] >= start_day) & (df["timestamp"] < end_day)]
内容的提问来源于stack exchange,提问作者Souvik Ray
相关产品推荐
相关产品推荐

