【Pandas】pandas Series tz_convert

Pandas2.2 Series

Time Series-related

方法 描述
Series.asfreq(freq[, method, how, …]) 用于将时间序列数据转换为指定的频率
Series.asof(where[, subset]) 用于返回时间序列中指定索引位置的最近一个非缺失值
Series.shift([periods, freq, axis, …]) 用于将时间序列数据沿指定轴移动指定的周期数
Series.first_valid_index() 用于返回时间序列中第一个非缺失值(非 NaN)的索引
Series.last_valid_index() 用于返回时间序列中最后一个非缺失值(非 NaN)的索引
Series.resample(rule[, axis, closed, label, …]) 用于对时间序列数据进行重采样
Series.tz_convert(tz[, axis, level, copy]) 用于将时间序列中的时间戳从一个时区转换到另一个时区

pandas.Series.tz_convert

pandas.Series.tz_convert 方法用于将时间序列中的时间戳从一个时区转换到另一个时区。该方法不会改变数据的时间点,仅更改其时区表示。

详细描述
  • 参数:
    • tz: 目标时区,可以是字符串(如 'US/Eastern''UTC')或 pytzdateutil 的时区对象。
    • axis: 可选,默认为 0。表示沿哪个轴进行操作,对于 Series 来说通常是 0
    • level: 可选,默认为 None。如果索引是多级索引,则指定要转换的级别。
    • copy: 可选,默认为 True。是否返回一个新的 Series 对象,还是在原地修改。
返回值
  • 返回一个新的 Series,其中时间戳已转换为指定的时区。
示例代码及结果
import pandas as pd
import pytz

# 创建一个带有 UTC 时间戳的 Series
dates = pd.date_range(start='2023-10-01', periods=5, freq='H', tz='UTC')
s_utc = pd.Series(range(5), index=dates)

print("原始 UTC Series:")
print(s_utc)

# 将时间戳从 UTC 转换为 US/Eastern 时区
s_eastern = s_utc.tz_convert('US/Eastern')

print("\n转换为 US/Eastern 时区后的 Series:")
print(s_eastern)
输出结果
原始 UTC Series:
2023-10-01 00:00:00+00:00    0
2023-10-01 01:00:00+00:00    1
2023-10-01 02:00:00+00:00    2
2023-10-01 03:00:00+00:00    3
2023-10-01 04:00:00+00:00    4
Freq: h, dtype: int64

转换为 US/Eastern 时区后的 Series:
2023-09-30 20:00:00-04:00    0
2023-09-30 21:00:00-04:00    1
2023-09-30 22:00:00-04:00    2
2023-09-30 23:00:00-04:00    3
2023-10-01 00:00:00-04:00    4
Freq: h, dtype: int64
结果解释
  • 在示例中,原始 Series 的时间戳是 UTC 时区。
  • 使用 tz_convert('US/Eastern') 将时间戳转换为 US/Eastern 时区。
  • 注意,时间点本身没有变化,只是时区表示不同。例如,2023-10-01 00:00:00+00:00(UTC)转换为 2023-09-30 20:00:00-04:00(US/Eastern),因为 UTC 比 US/Eastern 快 4 小时。
更复杂的例子:多级索引
# 创建一个多级索引的 DataFrame 并选择一列作为 Series
index = pd.MultiIndex.from_product([pd.date_range(start='2023-10-01', periods=2, freq='H', tz='UTC'), ['A', 'B']])
df = pd.DataFrame({'value': range(4)}, index=index)
s_multi = df['value']

print("原始多级索引 Series:")
print(s_multi)

# 将时间戳从 UTC 转换为 Asia/Shanghai 时区,并指定级别
s_shanghai = s_multi.tz_convert('Asia/Shanghai', level=0)

print("\n转换为 Asia/Shanghai 时区后的 Series:")
print(s_shanghai)
输出结果
原始多级索引 Series:
2023-10-01 00:00:00+00:00  A    0
                           B    1
2023-10-01 01:00:00+00:00  A    2
                           B    3
Name: value, dtype: int64

转换为 Asia/Shanghai 时区后的 Series:
2023-10-01 08:00:00+08:00  A    0
                           B    1
2023-10-01 09:00:00+08:00  A    2
                           B    3
Name: value, dtype: int64
结果解释
  • 在示例中,原始 Series 使用了多级索引,其中第一级是带有 UTC 时区的时间戳。
  • 使用 tz_convert('Asia/Shanghai', level=0) 将第一级时间戳转换为 Asia/Shanghai 时区。
  • 注意,时间点本身没有变化,只是时区表示不同。例如,2023-10-01 00:00:00+00:00(UTC)转换为 2023-10-01 08:00:00+08:00(Asia/Shanghai),因为 UTC 比 Asia/Shanghai 慢 8 小时。

这种方法非常适用于需要处理跨时区数据的场景,例如金融数据、日志分析等。

你可能感兴趣的:(Pandas,Series,pandas)