当前位置: 首页 > news >正文

时间序列频率转换

pandas.Series.dt.floor
时间列向下取整
pandas.DataFrame.set_index
pandas.DataFrame.set_index() 是 Pandas 中用于将指定列设置为 DataFrame 新索引的方法。以下是它的核心作用、使用场景和具体示例:


1. 核心作用

  • 改变索引:将一列或多列数据转换为行索引(替换默认的0-based数字索引)。
  • 提升查询效率:索引列的数据会被优化存储,加速后续的 lociloc 等基于索引的操作。
  • 时间序列处理:特别适合将时间列设为索引,方便时间相关的重采样(resample)和滑动窗口(rolling)操作。

2. 主要参数

参数说明
keys要设为索引的列名(单列或多列)
drop=True是否从数据列中移除已被设为索引的列(默认True,即移除)
append=False是否保留原有索引并追加新索引(默认False,即替换)
inplace=False是否直接修改原DataFrame(默认False,返回新对象)

3. 使用示例

示例数据准备
import pandas as pd

df = pd.DataFrame({
    'date': ['2023-01-01', '2023-01-02', '2023-01-03'],
    'city': ['Beijing', 'Shanghai', 'Guangzhou'],
    'temperature': [25, 28, 30]
})
print("原始DataFrame:")
print(df)

输出:

         date       city  temperature
0  2023-01-01    Beijing           25
1  2023-01-02   Shanghai           28
2  2023-01-03  Guangzhou           30

场景1:将单列设为索引
# 将date列设为索引(默认会移除该列)
df_date_index = df.set_index('date')
print("\n设置date为索引后的结果:")
print(df_date_index)

输出:

                city  temperature
date                            
2023-01-01  Beijing           25
2023-01-02 Shanghai           28
2023-01-03 Guangzhou         30

场景2:保留原列并设置多级索引
# 将date和city设为多级索引(保留原列)
df_multi_index = df.set_index(['date', 'city'], drop=False)
print("\n多级索引结果:")
print(df_multi_index)

输出:

                          date       city  temperature
date       city                                     
2023-01-01 Beijing  2023-01-01    Beijing           25
2023-01-02 Shanghai 2023-01-02   Shanghai           28
2023-01-03 Guangzhou 2023-01-03  Guangzhou           30

场景3:时间序列处理(关键用途)
# 将时间列转为DatetimeIndex后设为索引
df['date'] = pd.to_datetime(df['date'])
df_time_index = df.set_index('date')

# 现在可以方便地进行时间相关操作
print("\n按月份求平均温度:")
print(df_time_index['temperature'].resample('M').mean())

输出:

date
2023-01-31    27.666667
Freq: M, Name: temperature, dtype: float64

4. 注意事项

  1. 索引唯一性:设为索引的列应具有唯一值,否则可能影响查询性能。
    • 检查重复值:df.duplicated(subset=['待设索引列']).sum()
  2. 不可变特性:索引一旦设定,不能直接修改(需通过reset_index()还原后重新设置)。
  3. 查询优化:对于大表,设置索引后使用 lociloc 更高效:
    # 快速查询特定日期的数据
    df_time_index.loc['2023-01-01']
    

5. 实际应用场景

场景操作示例优势
时间序列分析df.set_index(pd.to_datetime(df['date']))支持resamplerolling
多维度数据分析set_index(['region', 'year'])方便groupby多层聚合
快速行列转换结合unstack()使用生成透视表结构
加速特定列查询对高频查询列设索引提升loc查询速度

总结

  • 核心作用:将数据列转换为索引,优化数据结构和查询效率。
  • 时间序列必用:设为时间索引后,才能使用Pandas强大的时间序列功能。
  • 多级索引:适合处理多维数据分析(如地区-时间双重维度)。

通过合理使用set_index(),可以显著提升数据操作的效率和代码可读性。
pandas.DataFrame.resample 重采样

时间序列频率转换重采样的便捷方法。对象必须具有日期时间类型的索引(如 DatetimeIndexPeriodIndexTimedeltaIndex),或者调用者需通过 on/level 关键字参数传递日期时间类型数据列/索引的标签。


关键术语解释

  1. frequency conversion

    • 频率转换:指将时间序列数据的时间间隔从一种频率调整为另一种频率(例如从分钟级调整为小时级)。
  2. resampling

    • 重采样:对时间序列数据进行重新采样,通常用于聚合或调整时间粒度(如按小时求和、按天平均等)。
  3. datetime-like index

    • 日期时间类型的索引:Pandas 中用于表示时间的索引类型,包括:
      • DatetimeIndex:标准的日期时间索引(如 2023-01-01 00:00:00)。
      • PeriodIndex:表示时间周期的索引(如 2023Q1 表示第一季度)。
      • TimedeltaIndex:表示时间间隔的索引(如 1 day, 2 hours)。
  4. on/level 参数

    • 如果数据的日期时间信息存储在某一列(而非索引)中,可以通过 on 参数指定该列的名称;在多级索引(MultiIndex)中,可通过 level 参数指定时间所在的层级。

示例用法

import pandas as pd

# 示例数据:每分钟的温度数据
data = {
    'timestamp': pd.date_range(start='2023-01-01', periods=6, freq='T'),  # T 表示分钟
    'temperature': [20, 22, 21, 23, 24, 25]
}
df = pd.DataFrame(data)

# 将时间列设为索引
df.set_index('timestamp', inplace=True)

# 使用 resample 按小时聚合(频率转换为 H)
hourly_data = df.resample('H').mean()  # 计算每小时的平均温度

print(hourly_data)

输出:

                   temperature
timestamp                      
2023-01-01 00:00:00         21.0  # 每小时的平均值(假设数据跨度不足一小时)

注意事项

  • 如果数据的日期时间信息不在索引中,需通过 on 参数指定列名:
    df.resample('H', on='timestamp').mean()
    
  • 对于多级索引,需通过 level 参数指定时间所在的层级:
    df.resample('H', level='time_index').mean()
    

希望这段翻译和解释对你理解 resample 方法有所帮助!

相关文章:

  • 【Python】读取xlsb或xlsx的单一或连续单元格工具类
  • 从0到1构建工具站 - day6 (在线编程工具-docker)
  • C++初阶-C++入门基础
  • ubuntu自动更新--unattended-upgrades
  • AWS服务器 磁盘空间升级到100G后,怎么使其生效?
  • 在conda虚拟环境安装GIT并且克隆github上项目指南(解决443问题)
  • 全栈开发套件Telerik DevCraft——赋能现代化应用构建
  • STL库里的常用容器
  • Redis 缓存 + MySql 持久化 实现点赞服务
  • kotlin协程
  • C++ Socket优化实战:提升网络应用的性能与效率
  • Prompt攻击
  • C++ 入门二:C++ 编程预备知识
  • JavaScript中Reflect对象指南:更智能的对象操作
  • BLE 协议栈事件驱动机制详解
  • Codeforces Round 1016 (Div. 3)题解
  • Django软删除功能完整指南:构建图书馆项目
  • 【Docker项目实战】使用Docker部署ToDoList任务管理工具
  • 亮相CMEF,美的医疗全维度打造智慧医疗新生态
  • HTML的Canvas元素
  • 木兰网站建设/黄冈网站推广软件
  • 国外效果图网站/谷歌搜索引擎营销
  • 网站开发代码无中文/网络视频营销平台
  • 常熟做网站多少钱按/长尾词优化外包
  • 找企业名录的网站/seo外链收录
  • 做本地房产网站/网站seo策划方案案例分析