Python酷库之旅-第三方库Pandas(070)
目录
一、用法精讲
281、pandas.Series.dt.daysinmonth属性
281-1、语法
281-2、参数
281-3、功能
281-4、返回值
281-5、说明
281-6、用法
281-6-1、数据准备
281-6-2、代码示例
281-6-3、结果输出
282、pandas.Series.dt.tz属性
282-1、语法
282-2、参数
282-3、功能
282-4、返回值
282-5、说明
282-6、用法
282-6-1、数据准备
282-6-2、代码示例
282-6-3、结果输出
283、pandas.Series.dt.freq属性
283-1、语法
283-2、参数
283-3、功能
283-4、返回值
283-5、说明
283-6、用法
283-6-1、数据准备
283-6-2、代码示例
283-6-3、结果输出
284、pandas.Series.dt.isocalendar属性
284-1、语法
284-2、参数
284-3、功能
284-4、返回值
284-5、说明
284-6、用法
284-6-1、数据准备
284-6-2、代码示例
284-6-3、结果输出
285、pandas.Series.dt.to_period方法
285-1、语法
285-2、参数
285-3、功能
285-4、返回值
285-5、说明
285-6、用法
285-6-1、数据准备
285-6-2、代码示例
285-6-3、结果输出
二、推荐阅读
1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页
一、用法精讲
281、pandas.Series.dt.daysinmonth属性
281-1、语法
# 281、pandas.Series.dt.daysinmonth属性
pandas.Series.dt.daysinmonth
The number of days in the month.
281-2、参数
无
281-3、功能
用于返回一个包含每个日期对应月份的天数的序列,这在时间序列分析中尤其有用,比如需要计算每个月的总天数时,或在处理日期数据时,需要知道某个月有多少天来进行一些特定的操作或分析,具备同样功能的还有pandas.Series.dt.days_in_month属性。
281-4、返回值
返回每个时间戳所对应月份的天数,其返回值是一个包含每个时间戳所在月份天数的整数系列(Series)。
281-5、说明
使用场景:
281-5-1、财务分析:确定每个月的天数对月末结算、预算编制和财务预测非常重要。例如,财务团队需要知道每个月的天数以便准确计算月度预算和实际开销。
281-5-2、数据完整性检查:在处理时间序列数据时,例如销售数据或传感器数据,可以使用daysinmonth确认每个月的数据是否完整,如果某个月的数据少于应有天数,可能需要进一步调查和处理。
281-5-3、平均日值计算:在数据分析中,经常需要将月度数据转换为平均日值。例如,在分析气象数据时,需要计算每月的平均日气温或降雨量。
281-5-4、时间序列转换:在某些情况下,可能需要将时间序列数据从月度转换为季度或年度数据,在这种转换过程中,需要知道每个月的天数以进行适当的加权计算。
281-5-5、资源规划和调度:在项目管理和资源规划中,了解每个月的天数可以帮助更好地进行资源分配和调度。例如,在人员管理中,根据每个月的天数合理分配工作量。
281-5-6、时间序列模拟:在模拟时间序列数据时,可以根据每个月的天数生成更为真实和合理的数据。例如,模拟每日销售数据时,可以根据每个月的天数生成月度数据。
281-5-7、时间序列分析:在进行季节性和周期性分析时,每个月的天数是一个重要的参考因素。例如,在分析股票市场的月度回报率时,可以考虑每个月的天数来计算加权平均值。
281-6、用法
281-6-1、数据准备
无
281-6-2、代码示例
# 281、pandas.Series.dt.daysinmonth属性
# 281-1、财务分析-月末结算和预算编制
import pandas as pd
# 创建一个日期序列
date_series = pd.date_range(start='2023-01-01', end='2023-12-31', freq='MS')
# 假设每个月的开销(单位:美元)
monthly_expenses = pd.Series([3000, 2800, 3200, 3100, 2900, 2700, 3500, 3300, 3400, 3600, 3800, 3700], index=date_series)
# 计算每月的天数
days_in_month = date_series.daysinmonth
# 计算每月的平均日开销
daily_expenses = monthly_expenses / days_in_month
print(daily_expenses, end='\n\n')# 281-2、数据完整性检查-验证数据完整性
import pandas as pd
# 假设一个日期序列和对应的数据
date_series = pd.date_range(start='2023-01-01', end='2023-12-31')
data = pd.Series(range(len(date_series)), index=date_series)
# 计算每个月的数据点
expected_days = date_series.to_series().dt.daysinmonth
actual_days = data.groupby(data.index.month).size()
# 检查是否有缺失的数据
missing_data = expected_days - actual_days
print(missing_data, end='\n\n')# 281-3、平均日值计算-计算每月的平均日气温
import pandas as pd
# 创建一个日期序列
date_series = pd.date_range(start='2023-01-01', end='2023-12-31', freq='MS')
# 假设每个月的平均气温(单位:摄氏度)
monthly_temperature = pd.Series([2.5, 3.0, 5.5, 10.0, 15.0, 20.0, 25.0, 24.0, 20.0, 15.0, 8.0, 3.0], index=date_series)
# 计算每月的天数
days_in_month = date_series.daysinmonth
# 计算每月的平均日气温
average_daily_temperature = monthly_temperature / days_in_month
print(average_daily_temperature, end='\n\n')# 281-4、时间序列转换-将月度数据转换为季度数据
import pandas as pd
# 创建一个日期序列
date_series = pd.date_range(start='2023-01-01', end='2023-12-31', freq='ME')
# 假设每个月的某项数据(单位:任意)
monthly_data = pd.Series([100, 120, 110, 130, 140, 150, 160, 170, 180, 190, 200, 210], index=date_series)
# 计算每月的天数
days_in_month = date_series.daysinmonth
# 将月度数据转换为季度数据
quarterly_data = monthly_data.resample('QE').sum() / date_series.to_series().dt.daysinmonth.groupby(pd.Grouper(freq='QE')).sum()
print(quarterly_data, end='\n\n')# 281-5、资源规划和调度-根据每个月的天数规划人力资源
import pandas as pd
# 创建一个日期序列
date_series = pd.date_range(start='2023-01-01', end='2023-12-31', freq='ME')
# 假设总工作量(单位:小时)
total_workload = 1200
# 创建一个包含日期的Series
date_series = pd.Series(date_series)
# 计算每月的天数
days_in_month = date_series.dt.daysinmonth
# 根据每个月的天数规划人力资源
workload_per_day = total_workload / days_in_month.sum()
print(workload_per_day, end='\n\n')# 281-6、时间序列模拟-生成模拟的每日销售数据
import pandas as pd
# 创建一个日期序列
date_series = pd.date_range(start='2023-01-01', end='2023-12-31', freq='ME')
# 假设每个月的销售数据(单位:任意)
monthly_sales = pd.Series([3000, 3200, 3100, 3300, 3400, 3500, 3600, 3700, 3800, 3900, 4000, 4100], index=date_series)
# 计算每月的天数
days_in_month = date_series.daysinmonth
# 生成模拟的每日销售数据
simulated_daily_sales = monthly_sales / days_in_month
print(simulated_daily_sales, end='\n\n')# 281-7、时间序列分析-计算加权平均回报率
import pandas as pd
from pandas.tseries.offsets import MonthEnd
# 创建一个日期序列,表示每个月的月末
date_series = pd.date_range(start='2023-01-01', end='2023-12-31', freq=MonthEnd())
# 假设每个月的回报率(单位:百分比),注意这里转换为小数形式
monthly_return = pd.Series([0.02, 0.015, 0.025, 0.03, 0.028, 0.031, 0.029, 0.032, 0.035, 0.038, 0.04, 0.037],index=date_series)
# 初始化一个列表来存储每个月的天数
days_in_month = []
# 计算每个月的天数
for i in range(len(date_series) - 1):start_date = date_series[i]end_date = date_series[i + 1]# 由于freq='ME',end_date实际上是下个月的月末,所以我们用end_date - MonthEnd()来获取本月最后一天last_day_of_month = end_date - MonthEnd(1)# 计算这个月有多少天days_in_month.append((last_day_of_month - start_date).days + 1)
# 转换为pandas Series以便进行索引和计算
days_in_month = pd.Series(days_in_month, index=date_series[:-1]) # 去掉最后一个月末的日期,因为它不包含数据
# 计算加权平均回报率
# 注意:我们需要将days_in_month向前移动一个月,以便与monthly_return的索引对齐
weighted_return = (monthly_return * days_in_month.shift(1)).sum() / days_in_month.sum()
# 由于我们使用了shift(1),所以第一个月的回报率没有被计算在内(因为没有前一个月的天数)
# 如果我们希望包含整个年份的回报率,我们可以选择忽略第一个月或者使用一个默认值
# 但在这里,我们假设数据是从第二个月开始有效的,或者简单地忽略这个细节
# 打印加权平均回报率
print(weighted_return)
281-6-3、结果输出
# 281、pandas.Series.dt.daysinmonth属性
# 281-1、财务分析-月末结算和预算编制
# 2023-01-01 96.774194
# 2023-02-01 100.000000
# 2023-03-01 103.225806
# 2023-04-01 103.333333
# 2023-05-01 93.548387
# 2023-06-01 90.000000
# 2023-07-01 112.903226
# 2023-08-01 106.451613
# 2023-09-01 113.333333
# 2023-10-01 116.129032
# 2023-11-01 126.666667
# 2023-12-01 119.354839
# Freq: MS, dtype: float64# 281-2、数据完整性检查-验证数据完整性
# 2023-01-01 00:00:00 NaN
# 2023-01-02 00:00:00 NaN
# 2023-01-03 00:00:00 NaN
# 2023-01-04 00:00:00 NaN
# 2023-01-05 00:00:00 NaN
# ..
# 8 NaN
# 9 NaN
# 10 NaN
# 11 NaN
# 12 NaN
# Length: 377, dtype: float64# 281-3、平均日值计算-计算每月的平均日气温
# 2023-01-01 0.080645
# 2023-02-01 0.107143
# 2023-03-01 0.177419
# 2023-04-01 0.333333
# 2023-05-01 0.483871
# 2023-06-01 0.666667
# 2023-07-01 0.806452
# 2023-08-01 0.774194
# 2023-09-01 0.666667
# 2023-10-01 0.483871
# 2023-11-01 0.266667
# 2023-12-01 0.096774
# Freq: MS, dtype: float64# 281-4、时间序列转换-将月度数据转换为季度数据
# 2023-03-31 3.666667
# 2023-06-30 4.615385
# 2023-09-30 5.543478
# 2023-12-31 6.521739
# Freq: QE-DEC, dtype: float64# 281-5、资源规划和调度-根据每个月的天数规划人力资源
# 3.287671232876712# 281-6、时间序列模拟-生成模拟的每日销售数据
# 2023-01-31 96.774194
# 2023-02-28 114.285714
# 2023-03-31 100.000000
# 2023-04-30 110.000000
# 2023-05-31 109.677419
# 2023-06-30 116.666667
# 2023-07-31 116.129032
# 2023-08-31 119.354839
# 2023-09-30 126.666667
# 2023-10-31 125.806452
# 2023-11-30 133.333333
# 2023-12-31 132.258065
# Freq: ME, dtype: float64# 281-7、时间序列分析-计算加权平均回报率
# 0.027545454545454543
282、pandas.Series.dt.tz属性
282-1、语法
# 282、pandas.Series.dt.tz属性
pandas.Series.dt.tz
Return the timezone.Returns:
datetime.tzinfo, pytz.tzinfo.BaseTZInfo, dateutil.tz.tz.tzfile, or None
Returns None when the array is tz-naive.
282-2、参数
无
282-3、功能
用于获取或设置pandas.Series对象中时间戳的时区信息。
282-4、返回值
如果pandas.Series中的时间戳带有时区信息,则dt.tz返回pytz库中的tzinfo对象,表示时间戳的时区。例如,<UTC>表示协调世界时(UTC);如果pandas.Series中的时间戳没有时区信息,则dt.tz返回None。
282-5、说明
无
282-6、用法
282-6-1、数据准备
无
282-6-2、代码示例
# 282、pandas.Series.dt.tz属性
import pandas as pd
# 创建一个带有UTC时区的时间戳Series对象
timestamps_with_tz = pd.Series(pd.date_range('2024-01-01', periods=3, freq='D', tz='UTC'))
# 获取时区信息
timezone_info = timestamps_with_tz.dt.tz
print(timezone_info)
# 创建一个没有时区的时间戳Series对象
timestamps_no_tz = pd.Series(pd.date_range('2024-01-01', periods=3, freq='D'))
# 获取时区信息
timezone_info_no_tz = timestamps_no_tz.dt.tz
print(timezone_info_no_tz)
282-6-3、结果输出
# 282、pandas.Series.dt.tz属性
# UTC
# None
283、pandas.Series.dt.freq属性
283-1、语法
# 283、pandas.Series.dt.freq属性
pandas.Series.dt.freq
283-2、参数
无
283-3、功能
用于返回时间序列数据的频率信息,它提供了时间序列索引的频率属性,可以帮助你确定数据的时间间隔,这对于时间序列数据的处理和分析非常重要,特别是在需要进行频率转换、重采样或预测等操作时。
283-4、返回值
返回一个pandas.tseries.offsets.DateOffset对象,代表时间序列的频率。如果时间序列不规则(即没有固定频率),则返回None。
283-5、说明
使用场景:
283-5-1、频率检测与验证:
283-5-1-1、检测时间序列的规律性:在处理时间序列数据时,了解数据的频率有助于确定其是否规律。例如,检测数据是否为日频、月频等,以便选择合适的分析方法。
283-5-1-2、验证数据的完整性:通过检测频率,可以识别数据中是否存在缺失值或异常点。例如,日频数据中可能存在缺少某几天的数据,通过dt.freq可以帮助发现这些问题。
283-5-2、重采样操作:
283-5-2-1、频率转换:在重采样操作中,需要将数据从一种频率转换为另一种频率,例如从日频转换为月频,dt.freq可以帮助确定当前数据的频率,从而选择合适的重采样规则。
283-5-2-2、聚合与降采样:在降采样时(例如,从分钟频率降到小时频率),了解原始数据的频率有助于正确地聚合数据。
283-5-3、时间序列的绘图:在时间序列的可视化中,频率信息可以帮助设置合适的时间刻度,使得图表更加清晰易读。例如,在月频数据的图表中,可以设置每个月为一个刻度。
283-5-4、异常检测:当时间序列数据不规则时,dt.freq会返回None,这种情况下,可以进一步分析数据的异常点或缺失值。
283-6、用法
283-6-1、数据准备
无
283-6-2、代码示例
# 283、pandas.Series.dt.freq属性
# 283-1、检测频率与验证数据完整性
import pandas as pd
# 创建一个日频率的时间序列数据
date_range = pd.date_range(start='2024-01-01', periods=10, freq='D')
data = pd.Series(range(10), index=date_range)
print("时间序列的频率:", data.index.freq)
# 检查是否有缺失日期
expected_dates = pd.date_range(start='2024-01-01', end='2024-01-10', freq='D')
missing_dates = expected_dates.difference(data.index)
if len(missing_dates) > 0:print("缺失的日期:", missing_dates)
else:print("没有缺失的日期", end='\n\n')# 283-2、重采样操作
import pandas as pd
# 创建一个小时频率的时间序列数据
hourly_range = pd.date_range(start='2024-01-01', periods=24, freq='h')
hourly_data = pd.Series(range(24), index=hourly_range)
print("原始数据的频率:", hourly_data.index.freq)
# 将小时频率的数据重采样为日频
daily_data = hourly_data.resample('D').sum()
print("重采样后的频率:", daily_data.index.freq)
print(daily_data, end='\n\n')# 283-3、时间序列的绘图
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib
# 配置字体,确保中文字符正常显示
matplotlib.rcParams['font.sans-serif'] = ['Microsoft YaHei']
# 创建一个月频率的时间序列数据
date_range = pd.date_range(start='2023-01-01', periods=12, freq='ME')
data = pd.Series(range(12), index=date_range)
print("时间序列的频率:", data.index.freq)
# 绘制时间序列图
plt.figure(figsize=(10, 5))
plt.plot(data.index, data, marker='o')
plt.title('时间序列图')
plt.xlabel('日期')
plt.ylabel('值')
plt.grid(True)
plt.show()# 283-4、异常检测
import pandas as pd
# 创建一个不规则的时间序列数据
irregular_range = pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-04'])
irregular_data = pd.Series([1, 2, 3], index=irregular_range)
print("不规则时间序列的频率:", irregular_data.index.freq)
# 检查不规则时间序列的缺失日期
expected_dates = pd.date_range(start='2024-01-01', end='2024-01-04', freq='D')
missing_dates = expected_dates.difference(irregular_data.index)
if len(missing_dates) > 0:print("缺失的日期:", missing_dates)
else:print("没有缺失的日期")
283-6-3、结果输出
# 283、pandas.Series.dt.freq属性
# 283-1、检测频率与验证数据完整性
# 时间序列的频率: <Day>
# 没有缺失的日期# 283-2、重采样操作
# 原始数据的频率: <Hour>
# 重采样后的频率: <Day>
# 2024-01-01 276
# Freq: D, dtype: int64# 283-3、时间序列的绘图
# 见图1# 283-4、异常检测
# 时间序列的频率: <MonthEnd>
# 不规则时间序列的频率: None
# 缺失的日期: DatetimeIndex(['2024-01-03'], dtype='datetime64[ns]', freq='D')
图1:
284、pandas.Series.dt.isocalendar属性
284-1、语法
# 284、pandas.Series.dt.isocalendar属性
pandas.Series.dt.isocalendar()
Calculate year, week, and day according to the ISO 8601 standard.Returns:
DataFrame
With columns year, week and day.
284-2、参数
无
284-3、功能
可以从日期时间对象中提取ISO年、ISO周和ISO星期几的信息。
284-4、返回值
返回一个DataFrame,其中包含三列:year、week和day。
284-5、说明
使用场景:
284-5-1、财务分析:在财务分析中,经常需要基于周、月或季度来汇总数据,使用ISO周数可以确保所有数据按照一致的周次进行汇总和分析。例如,比较每周的销售数据,分析季节性趋势。
284-5-2、周报和计划安排:ISO周数用于生成周报,确保每个报告周期的数据准确,特别是在计划和项目管理中。例如,生成项目进度周报、员工工作计划。
284-5-3、周期性数据分析:在时间序列分析中,识别和分析周期性趋势或季节性波动是常见任务,使用ISO周数有助于准确定位每周的数据点。例如,分析周度流量、评估季节性商品销售。
284-5-4、数据清理和对齐:在处理来自不同时间区域的数据时,使用ISO日历可以帮助标准化日期,以便更好地合并和对齐数据。例如,合并不同来源的时间序列数据。
284-5-5、国际化业务:ISO周数在国际化业务中尤其重要,因为它避免了由于不同地区采用不同的周定义(如周一或周日为一周开始)而产生的日期混淆。例如,跨国公司的全球报告系统。
284-6、用法
284-6-1、数据准备
无
284-6-2、代码示例
# 284、pandas.Series.dt.isocalendar属性
# 284-1、财务分析
import pandas as pd
# 创建一个销售数据DataFrame
data = {'date': pd.date_range('2024-07-01', periods=10, freq='D'),'sales': [100, 150, 200, 250, 300, 350, 400, 450, 500, 550]
}
df = pd.DataFrame(data)
# 提取ISO年和周数
df['iso_year'] = df['date'].dt.isocalendar().year
df['iso_week'] = df['date'].dt.isocalendar().week
# 按ISO周汇总销售数据
weekly_sales = df.groupby(['iso_year', 'iso_week'])['sales'].sum().reset_index()
print(weekly_sales, end='\n\n')# 284-2、周报和计划安排
import pandas as pd
# 创建一个项目进度DataFrame
data = {'task': ['Task A', 'Task B', 'Task C', 'Task D'],'start_date': pd.to_datetime(['2024-01-02', '2024-01-05', '2024-01-08', '2024-01-11']),'end_date': pd.to_datetime(['2024-01-06', '2024-01-09', '2024-01-12', '2024-01-15'])
}
df = pd.DataFrame(data)
# 提取ISO年和周数
df['start_week'] = df['start_date'].dt.isocalendar().week
df['end_week'] = df['end_date'].dt.isocalendar().week
# 输出结果
print(df, end='\n\n')# 284-3、周期性数据分析
import pandas as pd
import matplotlib.pyplot as plt
# 创建一个流量数据 DataFrame
data = {'date': pd.date_range('2024-07-01', periods=30, freq='D'),'traffic': [500, 600, 700, 800, 900, 1000, 1100,1200, 1300, 1400, 1500, 1600, 1700, 1800,1900, 2000, 2100, 2200, 2300, 2400, 2500,2600, 2700, 2800, 2900, 3000, 3100, 3200,3300, 3400]
}
df = pd.DataFrame(data)
# 提取ISO周数
df['iso_week'] = df['date'].dt.isocalendar().week
# 按周汇总流量数据
weekly_traffic = df.groupby('iso_week')['traffic'].sum()
# 绘制流量趋势图
plt.plot(weekly_traffic.index, weekly_traffic.values)
plt.xlabel('ISO Week')
plt.ylabel('Traffic')
plt.title('Weekly Traffic Analysis')
plt.grid(True)
plt.show()# 284-4、数据清理和对齐
import pandas as pd
# 创建两个来源的数据
data1 = {'date': pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03']),'value': [10, 20, 30]
}
data2 = {'date': pd.to_datetime(['2024-01-04', '2024-01-05', '2024-01-06']),'value': [40, 50, 60]
}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
# 提取ISO年和周数
df1['iso_week'] = df1['date'].dt.isocalendar().week
df2['iso_week'] = df2['date'].dt.isocalendar().week
# 合并数据
merged_data = pd.concat([df1, df2]).reset_index(drop=True)
# 输出结果
print(merged_data, end='\n\n')# 284-5、国际化业务
import pandas as pd
# 创建一个国际化日期数据DataFrame
data = {'region': ['US', 'EU', 'Asia'],'date': pd.to_datetime(['2024-01-01', '2024-01-02', '2024-01-03'])
}
df = pd.DataFrame(data)
# 提取 ISO 年和周数
df['iso_week'] = df['date'].dt.isocalendar().week
# 输出结果
print(df)
284-6-3、结果输出
# 284、pandas.Series.dt.isocalendar属性
# 284-1、财务分析
# iso_year iso_week sales
# 0 2024 27 1750
# 1 2024 28 1500# 284-2、周报和计划安排
# task start_date end_date start_week end_week
# 0 Task A 2024-01-02 2024-01-06 1 1
# 1 Task B 2024-01-05 2024-01-09 1 2
# 2 Task C 2024-01-08 2024-01-12 2 2
# 3 Task D 2024-01-11 2024-01-15 2 3# 284-3、周期性数据分析
# 见图2# 284-4、数据清理和对齐
# date value iso_week
# 0 2024-01-01 10 1
# 1 2024-01-02 20 1
# 2 2024-01-03 30 1
# 3 2024-01-04 40 1
# 4 2024-01-05 50 1
# 5 2024-01-06 60 1# 284-5、国际化业务
# region date iso_week
# 0 US 2024-01-01 1
# 1 EU 2024-01-02 1
# 2 Asia 2024-01-03 1
图2:
285、pandas.Series.dt.to_period方法
285-1、语法
# 285、pandas.Series.dt.to_period方法
pandas.Series.dt.to_period(*args, **kwargs)
Cast to PeriodArray/PeriodIndex at a particular frequency.Converts DatetimeArray/Index to PeriodArray/PeriodIndex.Parameters:
freq
str or Period, optional
One of pandas’ period aliases or an Period object. Will be inferred by default.Returns:
PeriodArray/PeriodIndex
Raises:
ValueError
When converting a DatetimeArray/Index with non-regular values, so that a frequency cannot be inferred.
285-2、参数
285-2-1、*args(可选):其他位置参数,为后续扩展功能做预留。
285-2-2、**kwargs(可选):其他关键字参数,为后续扩展功能做预留。
285-3、功能
将Series对象中的日期时间数据转换为周期数据,这对于时间序列分析非常有用,例如,按月、按季度或按年汇总数据;通过指定不同的频率,可以将日期时间数据转换为不同的周期类型。
285-4、返回值
返回一个新的Series对象,其中包含Period对象,Period是一个表示时间段的对象,例如一个月、一季度或一年等。
285-5、说明
使用场景:
285-5-1、数据汇总:将高频数据(如每日数据)汇总到较低频率的数据(如月度、季度或年度),以便于统计分析和报告。例如,将每日销售数据汇总为月度销售数据;将每小时的温度记录汇总为每月的平均温度。
285-5-2、时间序列分析:按不同周期对数据进行分析,观察和比较不同周期的趋势和变化。例如,比较不同季度的销售额增长趋势;分析年度的气候变化模式。
285-5-3、数据对齐:在处理多个时间序列时,确保数据对齐到同一周期,以便进行进一步的比较和分析。例如,将两个不同频率的时间序列(如每日和每周数据)对齐到同一周期(如每月)。
285-5-4、绘制周期图表:将时间序列数据按指定周期进行绘制,以便更直观地展示数据趋势和变化。例如,绘制每月的销售额变化图;绘制每季度的气温变化图。
285-5-5、数据过滤:按指定周期过滤数据,以便仅分析和处理特定时间段的数据。例如,过滤出特定月份的数据;只处理特定年份的数据。
285-6、用法
285-6-1、数据准备
无
285-6-2、代码示例
# 285、pandas.Series.dt.to_period方法
# 285-1、数据汇总
import pandas as pd
# 创建包含每日销售数据的Series
date_series = pd.Series([100, 200, 150, 300, 250], index=pd.date_range("2024-01-01", periods=5, freq="D"))
# 转换为月度周期
period_series_month = date_series.resample('ME').sum()
print(period_series_month, end='\n\n')# 285-2、时间序列分析
import pandas as pd
# 创建包含每日销售数据的Series
date_series = pd.Series([100, 200, 150, 300, 250, 400, 350, 450, 500, 600], index=pd.date_range("2024-01-01", periods=10, freq="D"))
# 转换为季度周期
period_series_quarter = date_series.to_period('Q').groupby(level=0).sum()
print(period_series_quarter, end='\n\n')# 285-3、数据对齐
import pandas as pd
# 创建包含每日销售数据的Series
date_series_daily = pd.Series([100, 200, 150, 300, 250], index=pd.date_range("2024-01-01", periods=5, freq="D"))
# 创建包含每周销售数据的Series
date_series_weekly = pd.Series([700, 800], index=pd.date_range("2024-01-01", periods=2, freq="W"))
# 转换为月度周期并对齐
period_series_daily_month = date_series_daily.to_period('M').groupby(level=0).sum()
period_series_weekly_month = date_series_weekly.to_period('M').groupby(level=0).sum()
aligned_series = period_series_daily_month.add(period_series_weekly_month, fill_value=0)
print(aligned_series, end='\n\n')# 285-4、绘制周期图表
import matplotlib.pyplot as plt
# 创建包含每日销售数据的Series
date_series = pd.Series([100, 200, 150, 300, 250, 400, 350, 450, 500, 600], index=pd.date_range("2024-01-01", periods=10, freq="D"))
# 转换为月度周期
period_series_month = date_series.to_period('M').groupby(level=0).sum()
# 绘制图表
period_series_month.plot(kind='bar')
plt.title('Monthly Sales')
plt.xlabel('Month')
plt.ylabel('Sales')
plt.show()# 285-5、数据过滤
import pandas as pd
# 创建包含每日销售数据的Series
date_series = pd.Series([100, 200, 150, 300, 250, 400, 350, 450, 500, 600], index=pd.date_range("2024-01-01", periods=10, freq="D"))
# 转换为月度周期
period_series_month = date_series.to_period('M')
# 过滤出2024年1月份的数据
filtered_series = period_series_month[period_series_month.index == '2024-01']
print(filtered_series)
285-6-3、结果输出
# 285、pandas.Series.dt.to_period方法
# 285-1、数据汇总
# 2024-01-31 1000
# Freq: ME, dtype: int64# 285-2、时间序列分析
# 2024Q1 3300
# Freq: Q-DEC, dtype: int64# 285-3、数据对齐
# 2024-01 2500
# Freq: M, dtype: int64# 285-4、绘制周期图表
# 见图3# 285-5、数据过滤
# 2024-01 100
# 2024-01 200
# 2024-01 150
# 2024-01 300
# 2024-01 250
# 2024-01 400
# 2024-01 350
# 2024-01 450
# 2024-01 500
# 2024-01 600
# Freq: M, dtype: int64
图3:
二、推荐阅读
1、Python筑基之旅
2、Python函数之旅
3、Python算法之旅
4、Python魔法之旅
5、博客个人主页
相关文章:

Python酷库之旅-第三方库Pandas(070)
目录 一、用法精讲 281、pandas.Series.dt.daysinmonth属性 281-1、语法 281-2、参数 281-3、功能 281-4、返回值 281-5、说明 281-6、用法 281-6-1、数据准备 281-6-2、代码示例 281-6-3、结果输出 282、pandas.Series.dt.tz属性 282-1、语法 282-2、参数 282-…...

第一篇Linux介绍
目录 1、操作系统 2、Windows和Linux操作系统的区别 3、 Linux 的发行版本 4、 linux 分支 5、 Linux 的含义 6、Linux 特点 1、操作系统 常见操作系统有:Windows、MacOS、Unix/Linux。 类 UNIX Windows:其是微软公司研发的收费操作系统ÿ…...
在Windows编程中,MFC\C++中OnCopyData如何传递基础类型数据?
在C中,OnCopyData 并不是一个标准的C库或框架中的成员函数,它更常见于Windows编程中,特别是使用Win32 API或MFC(Microsoft Foundation Classes)时。OnCopyData 是一个在MFC应用程序中常用于处理来自其他应用程序的WM_C…...

10款超好用的图纸加密软件推荐,2024企业常用图纸加密软件分享
在现代企业中,设计图纸和敏感数据的安全性至关重要。一旦图纸泄露,可能会对企业造成不可估量的损失。因此,选择一款高效、可靠的图纸加密软件显得尤为重要。 1. 安秉图纸加密软件 安秉图纸加密软件是一款专为保护工程图纸和设计文件安全的软…...

BUUCTF [安洵杯 2019]easy_serialize_php 1
打开题目,看到一串php代码,试着代码审计一下,看一下有用信息 可以看出是通过$_SESSION[img]来读取文件 extract可以将数组中的变量导入当前变量表 也就是说我们可以伪造$_SESSION 数组中的所有数据 这里传递一个参数fphpinfo 先用hackbar进…...
前端面试宝典【CSS篇】【5】
在前端开发的世界里,每一次面试都是一次机遇,也是一次挑战。 你是否曾因技术深度不够而错失良机? 或是面对最新的技术趋势感到迷茫? 我们的【前端面试宝典】正是为此而来。 由拥有多年一线实战经验的资深工程师亲自授课,结合最新的行业动态与实战案例,旨在全面提升你的技…...
stem32江科大自学笔记
江科大B站教程连接:【STM32入门教程-2023版 细致讲解 中文字幕】 系列文章目录 提示:收集stem32江科大自学笔记,方便自己和他人查看 视频对应目录STM32入门教程P1-3 [1-2]&[2-1]1.STM32简介、系统介绍、软件安装P4 [2-2]2.基于标准库(库…...

C++-类与对象基础
一,类的定义 1.1类定义格式 class为定义类的关键字,Stack为类的名字,{}中为类的主体,注意类定义结束时后面分号不能省略。类体中内容称为mian类的成员:类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者…...

嵌入式day20
feof: 检测文件是否到达结尾 ferroe: 检测文件是否发生错误 标准IO之文件定位 fseek() SEEK_END 指向最后一个字节的后一个,继续加,写文件,会将文件扩大 ftell() 获取…...

UE4 SLUA IOS打包报错解决办法
IOS打包报错:Fatal error "lua.h" file not found : SLua Unreal 在IOS远程打包编译的时候 Exteral没有copy过去,导致lua.h文件报错找不到,看了网上也没有写解决办法 错误信息截图: github上也有很多遇到改…...
SpringDI(依赖注入) 以及SpringIOC容器对Bean管理
一、SpringDI(依赖注入) 1.DI依赖注入 1.1 Spring DI的理解 关键字:名词解释 DI( Dependecy Inject,中文释义:依赖注入)是对Ioc概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IoC 容器…...

伯克利Linux系统管理: 脚本编写学习 课堂与实验(系统简洁保姆级学习)
Linux系列文章目录 补充内容 Windows通过SSH连接Linux 第一章 Linux基本命令的学习与Linux历史 第二章(上) Vim课堂与实验 文章目录 Linux系列文章目录一、前言二、学习内容:2.1 上课内容2.1.1 为什么要学习脚本编写?2.1.2 Bash编程语言2.1.3 SheBang2.…...

探索腾讯云AI代码助手的效能与实用性
前言开发环境配置项目实例应用一:功能介绍二:项目测试FFmpeg二次开发SDL应用加密播放器 帮助提升建议结语 前言 腾讯云的AI代码助手是一款强大的编码辅助工具,利用混元代码大模型技术,提供技术对话、代码补全、代码诊断和优化…...

清华大学终于把Python整理成了《漫画书》
前言 随着人工智能的发展,Python近两年也是大火,越来越多的人加入到Python学习大军,对于毫无基础的人该如何入门Python呢?小编这里整理了一套python编程零基础自学教程,清华大佬196小时讲完的,全程干货无废…...

有关Linux操作系统中僵尸进程与孤儿进程的理解
目录 一、僵尸进程(僵死状态)1.概念2.进程PID与退出码3.僵尸进程举例4.僵尸进程的危害5.僵尸进程的解决方案 二、孤儿进程1.概念2.特点3.孤儿进程解决僵尸进程 一、僵尸进程(僵死状态) 1.概念 僵死状态形象点说有点像是没死透的…...

Go语言实现依赖注入
文章目录 前言依赖注入是什么依赖注入的好处是什么结构图应用程序上下文接口上下文管理器暴露的功能使用示例最后 前言 你好,我是醉墨居士,欢迎来到我的博客,今天带领大伙使用Go语言实现依赖自动注入,我们不会使用其它的第三方库…...
不仅能防沉迷游戏的防沉迷软件(Python)
介绍 一个有那么一点功能但是又不太保险的防沉迷工具 我脑子进水了才会写这玩意儿 为了变强,我不择手段(笑出zhu jiao 代码 好像没什么用的设定界面 # -*- coding: utf-8 -*- # Environment PyCharm # File_name login |User Pfolg # 2024/…...

数学建模--智能算法之鱼群算法
目录 核心原理 应用与实现 实现步骤 性能分析与改进 鱼群算法在解决哪些具体优化问题方面表现最佳? 如何根据不同的应用场景调整鱼群算法的参数设置以提高其性能? 鱼群算法与其他群体智能优化算法(如遗传算法、粒子群优化)…...

html+css+js前端作业qq音乐官网5个页面 带js
htmlcssjs前端作业qq音乐官网5个页面 带js 有轮播图,tab切换等多种效果 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编…...

【mars3d】加载超图s3m模型说明
建议替换Cesium库,换成 超图版本Cesium mars3d mars3d-supermap ,需要引入的资源为: "mars3d": ["Cesium-supermap/Widgets/widgets.css", //超图版本Cesium "Cesium-supermap/Cesium.js","mars3d/plu…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...