看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
pandas
中的 Resampler.__iter__()
方法用于迭代 Resampler
对象,它可以让你对时间序列数据进行分组处理,并对每个组执行操作。这种方法适用于将时间序列数据按照指定频率分割后逐组处理。
__iter__()
是 Resampler
对象的一个内置方法,它不需要任何参数。
Resampler.__iter__()
__iter__()
方法没有任何参数。它的作用是返回一个迭代器,这个迭代器生成的是 (key, group)
对,key
是分组的标签(通常是时间戳),group
是属于该组的数据。
(key, group)
对,其中:key
是分组的键值,通常是时间戳。group
是一个 DataFrame
或 Series
,包含属于这个分组的数据。__iter__()
方法非常有用。Resampler
对象的每个分组,并对每个分组数据执行自定义操作。SeriesGroupBy:
lst = ['a', 'a', 'b']
ser = pd.Series([1, 2, 3], index=lst)
ser
'''
a 1
a 2
b 3
dtype: int64
'''
for x, y in ser.groupby(level=0):
print(f'{x}\n{y}\n')
'''
a
a 1
a 2
dtype: int64
b
b 3
dtype: int64
'''
DataFrameGroupBy:
data = [[1, 2, 3], [1, 5, 6], [7, 8, 9]]
df = pd.DataFrame(data, columns=["a", "b", "c"])
df
'''
a b c
0 1 2 3
1 1 5 6
2 7 8 9
'''
for x, y in df.groupby(by=["a"]):
print(f'{x}\n{y}\n')
'''
(1,)
a b c
0 1 2 3
1 1 5 6
(7,)
a b c
2 7 8 9
'''
Resampler:
ser = pd.Series([1, 2, 3, 4], index=pd.DatetimeIndex(
['2023-01-01', '2023-01-15', '2023-02-01', '2023-02-15']))
ser
'''
2023-01-01 1
2023-01-15 2
2023-02-01 3
2023-02-15 4
dtype: int64
'''
for x, y in ser.resample('MS'):
print(f'{x}\n\n{y}\n------------')
'''
2023-01-01 00:00:00
2023-01-01 1
2023-01-15 2
dtype: int64
------------
2023-02-01 00:00:00
2023-02-01 3
2023-02-15 4
dtype: int64
------------
'''
以下示例展示了如何使用 Resampler.__iter__()
方法按月分组时间序列数据,并对每个月的数据进行操作。
import pandas as pd
import numpy as np
# 创建一个示例 DataFrame
date_rng = pd.date_range(start='2024-01-01', end='2024-03-31', freq='D')
df = pd.DataFrame(date_rng, columns=['date'])
df['data'] = np.random.randint(0, 100, size=(len(date_rng)))
# 将 'date' 列设置为索引
df.set_index('date', inplace=True)
print("原始 DataFrame:")
print(df.head())
# 使用 resample 按月分组
resampler = df.resample('M')
# 迭代 resampler 对象并打印每个分组的数据
for key, group in resampler:
print(f"\n分组: {key}")
print(group)
原始 DataFrame:
data
date
2024-01-01 71
2024-01-02 84
2024-01-03 36
2024-01-04 11
2024-01-05 25
分组: 2024-01-31 00:00:00
data
date
2024-01-01 71
2024-01-02 84
2024-01-03 36
2024-01-04 11
2024-01-05 25
...
分组: 2024-02-29 00:00:00
data
date
2024-02-01 54
2024-02-02 68
2024-02-03 92
...
分组: 2024-03-31 00:00:00
data
date
2024-03-01 39
2024-03-02 72
2024-03-03 65
...
resample('M')
将数据按月进行分组,并生成一个 Resampler
对象。__iter__()
方法(隐式调用)来迭代每个分组,并对分组数据进行操作。在这个例子中,我们只是简单地打印了每个分组及其数据。这种方法非常适合在对时间序列数据进行重采样并需要对每个分组执行特定操作的情况下使用。
https://pandas.pydata.org/docs/reference/api/pandas.core.resample.Resampler.__iter__.html
更新时间:2024-08-15 08:39:01 标签:pandas python 迭代 重采样