You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Pandas Datetime Index切片以自动提取首日数据

提取时间序列DataFrame的首日数据(批量处理友好版)

当然可以!完全不需要手动指定具体日期,就能自动提取每个DataFrame的首日数据,特别适合批量处理不同起始日期的CSV文件。下面是几种实用的方法,结合你的场景来讲解:

前提准备:确保时间列是DatetimeIndex

首先要保证你的timestamp列已经被解析为日期时间类型,并且设置为DataFrame的索引(这样操作更高效):

import pandas as pd

# 读取CSV时直接解析时间列并设为索引
df = pd.read_csv('your_file.csv', parse_dates=['timestamp'], index_col='timestamp')

# 如果已经读取了数据,也可以事后转换
# df['timestamp'] = pd.to_datetime(df['timestamp'])
# df = df.set_index('timestamp')

方法1:利用日期匹配筛选(最直观)

获取DataFrame中第一条记录的日期,然后筛选所有属于该日期的行:

# 获取首日的日期(只保留年/月/日,去掉时分秒)
first_date = df.index[0].date()

# 筛选所有首日的数据
first_day = df[df.index.date == first_date]

这个方法简单易懂,不管时间序列是否排序都能正常工作。

方法2:利用索引切片(最高效)

如果你的时间序列是按时间升序排列的(大多数日志/轨迹数据都是这样),可以直接找到首日最后一条记录的位置,用切片快速提取:

# 找到首日最后一条记录的索引
last_timestamp_of_first_day = df.index[df.index.date == first_date].max()

# 切片提取从开头到首日结束的所有数据
first_day = df.loc[:last_timestamp_of_first_day]

切片操作比布尔筛选更快,适合处理大型数据集。

方法3:按日期分组取首个分组

用groupby按日期分组,直接提取第一个分组的所有数据:

# 按日期分组,获取第一个分组(即首日数据)
first_day = df.groupby(df.index.date).get_group(df.index.date[0])

这个方法逻辑清晰,也适合需要同时处理多日数据的场景。

批量处理多个CSV的示例

把上述逻辑封装到循环里,批量处理文件夹下的所有CSV:

import glob

for csv_file in glob.glob('*.csv'):
    # 读取并预处理数据
    df = pd.read_csv(csv_file, parse_dates=['timestamp'], index_col='timestamp')
    # 提取首日数据
    first_date = df.index[0].date()
    first_day = df[df.index.date == first_date]
    # 保存结果(比如在文件名前加first_day_前缀)
    first_day.to_csv(f'first_day_{csv_file}')

用你的示例数据测试的话,以上方法都会返回只包含2018-12-22的3条记录的DataFrame,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Juli4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 20:27:51