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)