Pandas 时间序列处理

发布于:2024-10-08 ⋅ 阅读:(160) ⋅ 点赞:(0)

Pandas 时间序列处理

说明: 请回答以下问题,以展示您对 pandas 中时间序列处理的全面理解。请在适用时提供代码示例。


问题 1

如何将日期字符串列表 ['2023-01-01', '2023-01-02', '2023-01-03'] 转换为 pandas 的 DatetimeIndex

问题 2

给定一个以日期时间为索引的 DataFrame df,如何重采样(resample)数据以获得每个月的平均值?

问题 3

描述在 pandas 中如何处理时区。请提供一个将朴素(naive)日期时间索引转换为特定时区的示例。

问题 4

pd.Timestamppd.DatetimeIndexpd.Period 之间有什么区别?请提供示例。

问题 5

如何创建一个以 2023 年 1 月份的工作日为索引的时间序列 DataFrame?

问题 6

解释如何使用滚动窗口(rolling window)计算时间序列的 7 天移动平均值。

问题 7

DataFrame df 包含不规则的时间戳数据,存在缺失日期。如何重新索引 df 以包含范围内的所有日期,并将缺失值填充为 NaN?

问题 8

解释在时间序列分析中 shift() 函数的用途。请提供一个使用它来计算当前值与前一天值差异的示例。

问题 9

在 pandas 时间序列中如何处理夏令时(Daylight Saving Time)转换?

问题 10

提供一个代码示例,将时间序列数据按周分组,并计算每周某一列的总和。

问题 11

解释 pandas 中 asfreq() 方法的使用。它与重采样(resampling)有何不同?

问题 12

date_range() 函数的用途是什么?如何使用它生成以小时为频率的时间序列?

问题 13

如何使用 pandas 内置的绘图功能绘制时间序列 DataFrame df

问题 14

解释如何使用基于时间的方法插值(interpolate)时间序列中的缺失值。

问题 15

给定格式不同的时间戳字符串,例如 '01/02/2023 14:30',如何将这些字符串解析为 pandas 的日期时间格式?

Pandas 时间序列处理 - 答案

问题 1

将日期字符串列表转换为 DatetimeIndex

import pandas as pd

date_strings = ['2023-01-01', '2023-01-02', '2023-01-03']
datetime_index = pd.to_datetime(date_strings)

问题 2

重采样数据以获得每个月的平均值:

monthly_avg = df.resample('M').mean()

问题 3

在 pandas 中处理时区可以使用 tz_localizetz_convert 方法:

# 假设 df 具有没有时区信息的日期时间索引
df = df.tz_localize('UTC')  # 设置时区为 UTC
df = df.tz_convert('Asia/Shanghai')  # 转换为上海时间

问题 4

  • pd.Timestamp:表示单个时间戳。

    timestamp = pd.Timestamp('2023-01-01')
    
  • pd.DatetimeIndex:由时间戳组成的索引。

    datetime_index = pd.DatetimeIndex(['2023-01-01', '2023-01-02'])
    
  • pd.Period:表示时间段(例如,一个月,一年)。

    period = pd.Period('2023-01', freq='M')
    

问题 5

创建以 2023 年 1 月的工作日为索引的 DataFrame:

dates = pd.date_range(start='2023-01-01', end='2023-01-31', freq='B')
df = pd.DataFrame(index=dates)

问题 6

计算时间序列的 7 天移动平均值:

df['7_day_avg'] = df['value_column'].rolling(window=7).mean()

问题 7

重新索引 df 以包含所有日期:

full_index = pd.date_range(start=df.index.min(), end=df.index.max(), freq='D')
df = df.reindex(full_index)

问题 8

shift() 函数用于按指定的周期数移动数据:

df['diff'] = df['value'] - df['value'].shift(1)

问题 9

pandas 使用带有时区信息的日期时间索引来处理夏令时转换。在转换时区时,pandas 会自动调整时间戳:

df = df.tz_localize('UTC').tz_convert('Europe/Berlin')

问题 10

按周分组并计算某一列的总和:

weekly_sum = df.resample('W').sum()

问题 11

asfreq() 方法用于将数据转换为指定频率,而不进行聚合,只是重新索引。与 resample() 不同,asfreq() 不会对数据进行计算:

df_asfreq = df.asfreq('D')

问题 12

date_range() 用于生成一系列日期时间:

hourly_dates = pd.date_range(start='2023-01-01', end='2023-01-02', freq='H')

问题 13

使用 pandas 内置的绘图功能绘制时间序列:

df.plot()

问题 14

使用基于时间的插值方法填充缺失值:

df.interpolate(method='time', inplace=True)

问题 15

解析自定义格式的日期字符串:

date_strings = ['01/02/2023 14:30']
dates = pd.to_datetime(date_strings, format='%d/%m/%Y %H:%M')

网站公告

今日签到

点亮在社区的每一天
去签到