TimeSeriesDataFrame 类
具有用于时序分析和预测的附加属性的 pandas.DataFrame 的子类。
具有用于时序分析和预测的附加属性的 pandas.DataFrame 的子类。
示例:
data1 = {'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [15, 25, 30], 'd': [1, 1, 2], ... 'date': pd.to_datetime(['2017-01-01', '2017-01-02', '2017-01-03'])} df1 = TimeSeriesDataFrame(data1, grain_colnames = ['a','b'], time_colname = 'date', ... ts_value_colname = 'c', group_colnames = 'd') data2 = {'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [15, 25, 30], 'd': [1, 1, 2], ... 'date': pd.date_range('2017-01-01', periods = 3, freq = 'D')} df2 = TimeSeriesDataFrame(data2, grain_colnames = 'a', time_colname = 'date', ... ts_value_colname = 'a', group_colnames = ['b','c']) data3 = {'a': [1, 2, 3], 'b': [4, 5, 6], 'c': [15, 25, 30], 'd': [1, 1, 2], ... 'month': pd.PeriodIndex(['2012-01', '2012-02', '2012-03'], ... dtype = 'period[M]', freq = 'M')} df3 = TimeSeriesDataFrame(data3, grain_colnames = ['a', 'b'], time_colname = 'month', ... ts_value_colname = 'b') data4 = {'a': [1,2,3], 'b': [4,5,6], 'c': [15, 25, 30], 'd': [1, 1, 2], ... 'month': [pd.Period('2012-01'), pd.Period('2012-02'), pd.Period('2012-03')]} df4 = TimeSeriesDataFrame(data4, grain_colnames = 'a', time_colname = 'month', ... ts_value_colname = 'b', group_colnames =['c','d'])
- 继承
-
pandas.core.frame.DataFrameTimeSeriesDataFrame
构造函数
TimeSeriesDataFrame(data, time_colname, index=None, columns=None, dtype=None, copy=True, grain_colnames=None, origin_time_colname=None, ts_value_colname=None, group_colnames=None)
参数
- data
请参阅 pandas.DataFrame
- index
请参阅 pandas.DataFrame
- columns
请参阅 pandas.DataFrame
- copy
请参阅 pandas.DataFrame
- dtype
请参阅 pandas.DataFrame
标识粒度列的列标签。
粒度列是用于标识现实世界中属于同一粒度的数据的列。
下面是一些简单的示例 - 以下销售数据包含两家店铺两年的年度销售数据。 在此示例中,grain_colnames=['store']。
>>> year store sales
... 0 2016-01-01 1 56
... 1 2017-01-01 1 98
... 2 2016-01-01 2 104
... 3 2017-01-01 2 140
另一个销售数据集包含两个店铺销售的两款产品的两年年度销售数据。 此处,grain_colnames=['store', 'product']。
>>> year store product sales
... 0 2016-01-01 1 1 56
... 1 2017-01-01 1 1 98
... 2 2016-01-01 2 1 104
... 3 2017-01-01 2 1 140
... 4 2016-01-01 1 2 100
... 5 2017-01-01 1 2 201
... 6 2016-01-01 2 2 65
... 7 2017-01-01 2 2 79
- time_colname
- str
标识时间轴的列标签。 时间列应为以下类型之一:Timestamp、DatetimeIndex、Period 或 PeriodIndex。 请参阅 pandas.Types.Time
方法
| check_duplicates |
检查索引和/或数据帧列中的重复值。 |
| check_regularity |
检查整个数据帧的规律性。 如果数据帧中的每个时序是有规律的,则数据帧是有规律的 |
| check_regularity_by_grain |
检查数据帧中每个时序的规律性。 如果满足以下条件,则时序是有规律的:
如果存在预测相关的粒度列(例如 origin_time),则按如下所示执行规律性检查:
|
| compute_ts_value_summary |
计算目标列的摘要统计信息。 即由 ts_value_colname 指定的列。 计算的统计信息包括缺失值的百分比、零值的百分比、时序的差异系数。 |
| construct_from_json |
从 JSON 字符串构造 TimeSeriesDataFrame。 输入字符串应符合 TimeSeriesDataFrame.to_json() 中使用的序列化格式。 |
| count_ts |
统计数据中的唯一时序数量。 |
| deduplicate_index |
删除 TimeSeriesDataFrame 索引中重复的粒度列。 如果在数据帧操作期间使用,则粒度列将会重复。 将粒度列移入和移出数据帧索引时,有时会发生这种情况。 |
| equals |
检查两个 TimeSeriesDataFrame 是否相等。 此方法旨在用于单元测试。 |
| fill_datetime_gap |
填补 TimeSeriesDataFrame 中的日期/时间间隙。 目标是将 TimeSeriesDataFrame 转换为常规 TimeSeriesDataFrame。 有关常规 TimeSeriesDataFrame 的定义,请参阅 TimeSeriesDataFrame.check_regularity_by_grain。
|
| from_time_series_data_set |
用于将时序数据集转换为 TimeSeriesDataFrame 的便捷方法。 |
| get_period_end_time_index |
在给定了有关时序频率的信息的情况下,推理时间戳隐含的时段结束时间。 有关详细信息,请参阅 get_period_start_time_index。 |
| get_period_start_time_index |
获取时段开始时间。 时序中的时间戳通常实际表示一个时间段。 例如,如果频率为每月,则“2017-01-01”可以表示从“2017-01-01”到“2017-01-31”的时段;如果频率为每年,则它可以表示从“2017-01-01”到“2017-12-31”的时段。 在给定了有关时序频率的信息的情况下,此方法将推理数据帧时间戳隐含的时段开始时间。 |
| groupby_grain |
按粒度对 TimeSeriesDataFrame 进行分组。 可用于对 TimeSeriesDataFrame 中的单个时序进行操作。 输出中的每个组应包含单个时序。 如果未设置粒度,则结果是包含整个 TimeSeriesDataFrame 的单个组 |
| groupby_group |
按组对 TimeSeriesDataFrame 进行分组。 组列可以是常规数据帧列和/或索引。 如果组为 None,则结果是包含整个 TimeSeriesDataFrame 的单个组。 |
| groupby_group_and_horizon |
按 group_colnames 属性中的列和 horizon_colname 对 TimeSeriesDataFrame 进行分组。 |
| groupby_index_names |
按数据帧索引中的列列表进行分组。 |
| groupby_slice_key |
按切片键对 TimeSeriesDataFrame 进行分组。 可用于对 TimeSeriesDataFrame 中的单个时序进行操作。 输出中的每个组应包含单个时序。 如果未设置粒度,则结果是包含整个 TimeSeriesDataFrame 的单个组 |
| identity_grain_level |
未为 TimeSeriesDataFrame 指定 grain_colnames 时的名称。 |
| infer_freq |
推理 TimeSeriesDataFrame 的频率。 如果找到多个频率,则此方法将返回最常见的频率并输出警告。 |
| infer_freq_by_grain |
推理每个粒度的频率。 此方法已弃用,将它保留的目的是为了后向兼容。 :param return_freq_string: 返回频率字符串而不是 pandas.tseries.offsets.DateOffset。 |
| infer_single_freq |
获取 TSDF 的频率,在其中可以推理所有时序中的单个统一频率。 否则将返回 None。 |
| merge |
覆盖 pandas merge 函数。
|
| reindex |
重写遵循 TimeSeriesDataFrame 元数据的 pandas.reindex。 |
| reset_index |
重置请求的数据帧索引级别。 此方法重写 pandas.reset_index,使其遵循 TimeSeriesDataFrame 元数据。 https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html |
| set_index |
设置数据帧索引。 此方法重写 pandas.set_index,使其遵循 TimeSeriesDataFrame 元数据。 |
| subset_by_grains |
获取按“粒度”指定的数据子集。 需要选择一个或一系列任意粒度时,此函数很有用。 如果需要某个粒度索引范围内的数据,建议使用 pandas.IndexSlice。 |
| subset_by_origin_time |
获取与 origin_time 的特定值或某个起始时间范围对应的子集。 主要用例是在多步预测环境中获取预测数据的“最新”切片。 |
| to_json |
将 TimeSeriesDataFrame 序列化为 JSON 字符串。 |
| to_time_series_data_set |
将 TimeSeriesDataFrame 转换为 TimeSeriesDataSet。 |
check_duplicates
检查索引和/或数据帧列中的重复值。
check_duplicates(cols)
参数
返回
如果输入列包含重复值,则为 True
返回类型
check_regularity
检查整个数据帧的规律性。
如果数据帧中的每个时序是有规律的,则数据帧是有规律的
check_regularity(freq=None)
参数
返回
如果帧中的所有时序是有规律的,则为 True。
返回类型
check_regularity_by_grain
检查数据帧中每个时序的规律性。
如果满足以下条件,则时序是有规律的:
- 时间索引中没有不规律的间隙
- 时间索引中没有重复的时间
- 时间索引中没有缺失值
如果存在预测相关的粒度列(例如 origin_time),则按如下所示执行规律性检查:
确保每个完整粒度没有重复的时间索引
组中列出。 此处的“完全粒度”是指所有粒度列,包括时序粒度列和预测相关的粒度列。
将删除每个时序粒度组中的重复时间索引。 然后,将确定每个时序粒度组中每个已删除重复数据的时间索引的规律性。
check_regularity_by_grain(freq=None)
参数
返回
具有规律性检查的数据帧会产生两列:
一个名为“regular”的布尔列
一个名为“problems”的字符串列
提供不规律性的详细信息。
粒度列包含索引。
返回类型
compute_ts_value_summary
计算目标列的摘要统计信息。
即由 ts_value_colname 指定的列。 计算的统计信息包括缺失值的百分比、零值的百分比、时序的差异系数。
compute_ts_value_summary()
返回
目标列统计信息的摘要。
返回类型
construct_from_json
从 JSON 字符串构造 TimeSeriesDataFrame。
输入字符串应符合 TimeSeriesDataFrame.to_json() 中使用的序列化格式。
construct_from_json(json_str)
参数
- json_str
返回
构造的数据帧
返回类型
count_ts
deduplicate_index
删除 TimeSeriesDataFrame 索引中重复的粒度列。
如果在数据帧操作期间使用,则粒度列将会重复。 将粒度列移入和移出数据帧索引时,有时会发生这种情况。
deduplicate_index(inplace=False, **kwargs)
参数
- **kwargs
传递给 TimeSeriesDataFrame.reset_index() 的关键字参数。
返回
仅在 grain_index 中具有唯一列的 TimeSeriesDataFrame。
equals
检查两个 TimeSeriesDataFrame 是否相等。
此方法旨在用于单元测试。
equals(other)
参数
返回
如果帧等于“other”,则为 True
返回类型
fill_datetime_gap
填补 TimeSeriesDataFrame 中的日期/时间间隙。
目标是将 TimeSeriesDataFrame 转换为常规 TimeSeriesDataFrame。 有关常规 TimeSeriesDataFrame 的定义,请参阅 TimeSeriesDataFrame.check_regularity_by_grain。
>>> data1 = pd.DataFrame(
... {'store': ['a', 'a', 'a', 'b', 'b'],
... 'brand': ['a', 'a', 'a', 'b', 'b'],
... 'date': pd.to_datetime(
... ['2017-01-01', '2017-01-03', '2017-01-04',
... '2017-01-01', '2017-01-02']),
... 'sales': [1, np.nan, 5, 2, np.nan],
... 'price': [np.nan, 2, 3, np.nan, 4]})
>>> df1 = TimeSeriesDataFrame(data1, grain_colnames=['store', 'brand'],
... time_colname='date',
... ts_value_colname='sales')
>>> df1
price sales
date store brand
2017-01-01 a a nan 1.00
2017-01-03 a a 2.00 nan
2017-01-04 a a 3.00 5.00
2017-01-01 b b nan 2.00
2017-01-02 b b 4.00 nan
>>> df1.fill_datetime_gap(freq='D')
brand date price sales store
0 a 2017-01-01 NaN 1.0 a
1 a 2017-01-02 NaN NaN a
2 a 2017-01-03 2.0 NaN a
3 a 2017-01-04 3.0 5.0 a
4 b 2017-01-01 NaN 2.0 b
5 b 2017-01-02 4.0 NaN b
fill_datetime_gap(freq=None, origin=None, end=None)
参数
- freq
- str 或 <xref:pandas.tseries.offsets.DateOffset>
如果提供了频率字符串,该函数将根据提供的字符串填补日期/时间间隙。 否则,它将推理频率字符串并相应地填充时间索引。 请参阅 offset-alias。
返回
正确填充具有日期/时间的 TimeSeriesDataFrame。
返回类型
from_time_series_data_set
用于将时序数据集转换为 TimeSeriesDataFrame 的便捷方法。
static from_time_series_data_set(tsds: azureml.automl.runtime._time_series_data_set.TimeSeriesDataSet) -> azureml.automl.runtime.shared.time_series_data_frame.TimeSeriesDataFrame
参数
- tsds
要转换为时序数据帧的时序数据集。
返回
新的时序数据帧。
get_period_end_time_index
在给定了有关时序频率的信息的情况下,推理时间戳隐含的时段结束时间。
有关详细信息,请参阅 get_period_start_time_index。
get_period_end_time_index(is_start_of_period=True, freq=None, floor_freq=None)
参数
- floor_freq
- str 或 <xref:pandas.tseries.offsets.DateOffset>
将根据此处指定的频率,设置计算出的时间指标(精度为微秒)的下限。 默认值为 None,即,根据输入数据的时间索引获取使用的下限频率。
返回
每个数据帧行的时段结束时间
返回类型
get_period_start_time_index
获取时段开始时间。
时序中的时间戳通常实际表示一个时间段。 例如,如果频率为每月,则“2017-01-01”可以表示从“2017-01-01”到“2017-01-31”的时段;如果频率为每年,则它可以表示从“2017-01-01”到“2017-12-31”的时段。
在给定了有关时序频率的信息的情况下,此方法将推理数据帧时间戳隐含的时段开始时间。
get_period_start_time_index(is_start_of_period=True, freq=None, floor_freq=None)
参数
- floor_freq
- str 或 <xref:pandas.tseries.offsets.DateOffset>
将根据此处指定的频率,设置计算出的时间指标(精度为微秒)的下限。 默认值为 None,即,根据输入数据的时间索引获取使用的下限频率。
返回
每个数据帧行的时段开始时间
返回类型
groupby_grain
按粒度对 TimeSeriesDataFrame 进行分组。
可用于对 TimeSeriesDataFrame 中的单个时序进行操作。 输出中的每个组应包含单个时序。 如果未设置粒度,则结果是包含整个 TimeSeriesDataFrame 的单个组
groupby_grain(group_keys=False, **kwargs)
参数
- **kwargs
要传递给 DataFrame.groupby 的其他关键字参数。
返回
GroupBy 对象
groupby_group
按组对 TimeSeriesDataFrame 进行分组。
组列可以是常规数据帧列和/或索引。
如果组为 None,则结果是包含整个 TimeSeriesDataFrame 的单个组。
groupby_group(group_keys=False, **kwargs)
参数
- group_keys
- bool
如果为 True,则在应用时将组键添加到索引。 默认值为 False,因为我们通常不希望在 groupby-apply 操作中修改 TimeSeriesDataFrame 的索引。
- **kwargs
要传递给 DataFrame.groupby 的其他关键字参数
返回
GroupBy 对象
groupby_group_and_horizon
按 group_colnames 属性中的列和 horizon_colname 对 TimeSeriesDataFrame 进行分组。
groupby_group_and_horizon(horizon_colname='horizon', group_keys=False, **kwargs)
参数
- horizon_colname
- <xref:<xref:'str'>>
用作边际列的列名,用于分组。 如果数据帧列或索引中不存在该列,则通过计算 time_index 与 origin_time_index 之间的时间差来计算新列。 此列的值为整数,单位为 TimeSeriesDataFrame 的频率。 注意:如果未设置 origin_time_colname 属性,则无法计算边际列,只会按 group_colnames 进行分组。
- kwargs
传递给 pandas.DataFrame.groupby 的其他参数
groupby_index_names
按数据帧索引中的列列表进行分组。
groupby_index_names(index_names, group_keys=False, **kwargs)
参数
- index_names
索引中用作分组依据的名称
- group_keys
boolean
- **kwargs
要传递给 DataFrame.groupby 的其他关键字参数
返回
pandas.GroupBy 对象
groupby_slice_key
按切片键对 TimeSeriesDataFrame 进行分组。
可用于对 TimeSeriesDataFrame 中的单个时序进行操作。 输出中的每个组应包含单个时序。 如果未设置粒度,则结果是包含整个 TimeSeriesDataFrame 的单个组
groupby_slice_key(group_keys=False, **kwargs)
参数
- **kwargs
要传递给 DataFrame.groupby 的其他关键字参数
返回
GroupBy 对象
identity_grain_level
未为 TimeSeriesDataFrame 指定 grain_colnames 时的名称。
identity_grain_level()
参数
- cls
infer_freq
推理 TimeSeriesDataFrame 的频率。
如果找到多个频率,则此方法将返回最常见的频率并输出警告。
infer_freq(return_freq_string=False)
参数
返回
如果未推理频率,则为 None。 如果推理了频率,则默认返回 pandas.tseries.offsets.DateOffset。 如果 return_freq_string=True,则返回偏移别名(频率字符串)。
infer_freq_by_grain
推理每个粒度的频率。
此方法已弃用,将它保留的目的是为了后向兼容。 :param return_freq_string:
返回频率字符串而不是 pandas.tseries.offsets.DateOffset。
infer_freq_by_grain(return_freq_string=False)
参数
- return_freq_string
返回
按粒度推理的频率。
返回类型
infer_single_freq
获取 TSDF 的频率,在其中可以推理所有时序中的单个统一频率。
否则将返回 None。
infer_single_freq(return_freq_string=False)
参数
返回
如果未推理单个统一频率,则为 None。 如果推理了频率,则默认返回 pandas.tseries.offsets.DateOffset。 如果 return_freq_string=True,则返回偏移别名(频率字符串)。
merge
覆盖 pandas merge 函数。
在两个 TimeSeriesDataFrames 上使用时,最好是使用默认值。
将元数据明智地传输到新对象。 对于左帧和右帧中都存在的类似于列表的元数据,合并帧中的列表项顺序与左对象的顺序相同。
merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)
参数
- right
右数据帧对象
- how
- str
{'left', 'right', 'outer', 'inner'} 中的一个。 默认值为“inner”。
left:仅使用左帧中的键,类似于 SQL 左外部联接;
保留键顺序
right:仅使用右帧中的键,类似于 SQL 右外部联接;保留键顺序
outer:使用两个帧中的键的并集,类似于 SQL 完全外部联接;按字典顺序将键排序
inner:使用两个帧中的键的交集,类似于 SQL 内部联接;保留左键的顺序
- indicator
- <xref:boolean> 或 str
如果为 True,则在输出数据帧中添加一个名为“_merge”的列,其中包含有关每行的源的信息。 如果为字符串,则将包含每行的源信息的列添加到输出数据帧,并且列是字符串的命名值。 信息列为 Categorical-type,对于合并键仅出现在“左”数据帧中的观测项,其取值为“left_only”;对于合并键仅出现在“右”数据帧中的观测项,其取值为“right_only”;如果在这两个数据帧中都找到了观测项的合并键,则取值为“both”。
返回
合并的数据帧
返回类型
reindex
重写遵循 TimeSeriesDataFrame 元数据的 pandas.reindex。
reindex(*args, **kwargs)
参数
- *args
传递给 pandas.reindex 的位置参数。
- **kwargs
传递给 pandas.reindex 的关键字参数。
reset_index
重置请求的数据帧索引级别。
此方法重写 pandas.reset_index,使其遵循 TimeSeriesDataFrame 元数据。
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.reset_index.html
reset_index(level=None, inplace=False, **kwargs)
参数
- level
要重置的索引级别。 对于 TimeSeriesDataFrames,级别可以是级别名称或要重置的整数索引的列表。 例如 level=tsdf.grain_colnames。 如果请求的级别删除了一部分粒度索引,则 self.grain_colnames 将会更新以反映更改。 时间索引无法重置。
- **kwargs
传递给 pandas.reset_index 的关键字参数。
返回
如果 inplace=False,则返回具有重置索引的数据帧;如果 inplace=True,则返回 None
返回类型
set_index
设置数据帧索引。
此方法重写 pandas.set_index,使其遵循 TimeSeriesDataFrame 元数据。
set_index(*args, **kwargs)
参数
- *args
传递给 pandas.set_index 的位置参数。
- **kwargs
传递给 pandas.set_index 的关键字参数。
subset_by_grains
获取按“粒度”指定的数据子集。
需要选择一个或一系列任意粒度时,此函数很有用。 如果需要某个粒度索引范围内的数据,建议使用 pandas.IndexSlice。
subset_by_grains(grains)
参数
- grains
- str, <xref:iterable>
要返回其粒度的数据。 如果 grain_colnnames 仅包含一个列名,则此值可以是字符串或字符串的可迭代对象。 如果 grain_colnames 包含多个列名,则此值可以是元组/列表的可迭代对象,其中每个元组/列表指定一个粒度。 每个元组/列表中的元素必须遵循与 grain_colnames 相同的顺序。
返回
按粒度指定的数据子集。
返回类型
subset_by_origin_time
获取与 origin_time 的特定值或某个起始时间范围对应的子集。
主要用例是在多步预测环境中获取预测数据的“最新”切片。
subset_by_origin_time(origin_time=None)
参数
- origin_time
应在输出中将 origin_time_index 的值限制到的日期或日期子集。 默认值为时间索引最新值的最早起始日期。 例如,在提前三步预测方案中,调用 subset_by_origin_time() 将返回:
在边际 1 进行的提前一步预测
在边际 2 进行的提前两步预测,以及
在边际 3 进行的提前三步预测。
如果未设置 origin_time_colname,此方法将返回整个 TimeSeriesDataFrame 并输出警告。
返回
origin_time 指定的数据子集。
返回类型
to_json
to_time_series_data_set
将 TimeSeriesDataFrame 转换为 TimeSeriesDataSet。
static to_time_series_data_set(tsdf: azureml.automl.runtime.shared.time_series_data_frame.TimeSeriesDataFrame) -> azureml.automl.runtime._time_series_data_set.TimeSeriesDataSet
参数
- tsdf
要转换的 timeSeriesDataFrame。
返回
时序数据集。
属性
frequency
TimeSeriesDataFrame 的频率,由 pandas.infer_freq 推理。
如果数据帧包含多个具有不同推理频率的粒度,则使用出现次数最多的频率。
grain_colnames
粒度列的列表。
grain_index
将粒度列用作索引。
如果有多个粒度列,则此属性是 pandas.MultiIndex。
group
将数据帧的列分组。
警告
如果组中的任何列是索引的一部分,
则此访问器将会失败。 请慎用。
group_colnames
组列名的列表。
horizon
每行的边际,由 time_index - origin_time_index 定义。
如果未设置 origin_time_colname,则 horizon=None。 此属性的类型为 pandas.TimedeltaIndex。
origin_time_colname
包含 origin_time 值的列的名称。
对于每个观察项,源时间表示使用其中的实际值生成了特征的最晚日期。
origin_time_index
用作 pandas.DatatimeIndex 的数据帧中的源时间。
slice_key_colnames
足以识别唯一时序的列列表。
切片键当前为 grain_colnames + origin_time_colname。
TimeSeriesDataFrame 的子类可能需要实现其自己版本的此属性。
slice_key_index
切片键列用作索引。
如果有多个切片键列,则此属性是 pandas.MultiIndex。
time_and_grain_colnames
包含 time_colname + grain_colnames 的列表。
time_colname
时间轴列名。
time_index
用作 pandas.DatatimeIndex 的数据帧的时间轴。
ts_value
用作 pandas.Series 的数据帧的目标值。
ts_value_colname
预测目标值的列名。
反馈
提交和查看相关反馈