DataFrame.asfreq(freq,method = None,how = None,normalize = False,fill_value = None)
将TimeSeries转换为指定的频率。
可选择提供填充方法来填充/回填缺失值。
返回符合指定频率的新索引的原始数据。resample如果需要一个操作(如摘要)来表示新频率的数据,则更合适。
参数: | freq : 方法 : {'backfill'/'bfill','pad'/'ffill'}, 默认 用于填充重建索引Series中的孔的方法 (请注意,这不会填充已存在的NaN): 'pad'/'ffill':将最后一次有效结果传播到下一个有效 'backfill'/'bfill':使用NEXT有效结果来填充 how : {‘ 仅适用于PeriodIndex, 请参阅PeriodIndex.asfreq normalize : 是否将输出索引重置为午夜 fill_value : 标量,可选 用于缺失值的值, 在上采样期间应用 (请注意,这不会填充已存在的NaN)。 版本0.20.0中的新功能。 |
返回: | converted : 与调用者相同的类型 |
Notes,
要了解有关频率字符串的更多信息,请参阅此链接。
例子,
1)基本用法
有一个包含每日数据的 DataFrame
,您想将其转换为每周数据。
import pandas as pd # 创建一个包含每日数据的示例 DataFrame date_range = pd.date_range(start='2024-01-01', periods=10, freq='D') data = {'value': range(10)} df = pd.DataFrame(data, index=date_range) # 将 DataFrame 重新采样为每周数据 df_weekly = df.asfreq('W') print(df_weekly)
2)使用填充方法
数据中有缺失日期,可以使用填充方法来处理这些缺失值。
import pandas as pd # 创建一个包含每日数据的示例 DataFrame,其中包含缺失日期 date_range = pd.date_range(start='2024-01-01', periods=10, freq='D') data = {'value': [0, 1, None, 3, None, 5, 6, None, 8, 9]} df = pd.DataFrame(data, index=date_range) # 将 DataFrame 重新采样为每两天一次,并使用向前填充方法 df_bi_daily = df.asfreq('2D', method='ffill') print(df_bi_daily)
3)使用填充值
可以使用 fill_value
参数指定缺失值的填充值。
import pandas as pd # 创建一个包含每日数据的示例 DataFrame,其中包含缺失日期 date_range = pd.date_range(start='2024-01-01', periods=10, freq='D') data = {'value': [0, 1, None, 3, None, 5, 6, None, 8, 9]} df = pd.DataFrame(data, index=date_range) # 将 DataFrame 重新采样为每两天一次,并使用特定的填充值 df_bi_daily = df.asfreq('2D', fill_value=0) print(df_bi_daily)
4)使用示例
import pandas as pd # 创建一个包含4个一分钟时间戳的系列 index = pd.date_range('1/1/2000', periods=4, freq='T') series = pd.Series([0.0, None, 2.0, 3.0], index=index) df = pd.DataFrame({'s': series}) print("原始 DataFrame:") print(df) # 将该 series 变为 30 秒的 bins df_30s = df.asfreq(freq='30S') print("\n重新采样为每30秒的 DataFrame:") print(df_30s) # 再次上传,提供一个 fill value df_30s_fill = df.asfreq(freq='30S', fill_value=9.0) print("\n重新采样为每30秒并使用填充值 9.0 的 DataFrame:") print(df_30s_fill) # 再次上传,提供一个 method df_30s_bfill = df.asfreq(freq='30S', method='bfill') print("\n重新采样为每30秒并使用向后填充的 DataFrame:") print(df_30s_bfill)