|
目录一、用法精讲271、pandas.Series.dt.dayofyear属性271-1、语法271-2、参数271-3、功能271-4、返回值271-5、说明271-6、用法271-6-1、数据准备271-6-2、代码示例271-6-3、结果输出272、pandas.Series.dt.days_in_month属性272-1、语法272-2、参数272-3、功能272-4、返回值272-5、说明272-6、用法272-6-1、数据准备272-6-2、代码示例272-6-3、结果输出273、pandas.Series.dt.quarter属性273-1、语法273-2、参数273-3、功能273-4、返回值273-5、说明273-6、用法273-6-1、数据准备273-6-2、代码示例273-6-3、结果输出274、pandas.Series.dt.is_month_start属性274-1、语法274-2、参数274-3、功能274-4、返回值274-5、说明274-6、用法274-6-1、数据准备274-6-2、代码示例274-6-3、结果输出275、pandas.Series.dt.is_month_end属性275-1、语法275-2、参数275-3、功能275-4、返回值275-5、说明275-6、用法275-6-1、数据准备275-6-2、代码示例275-6-3、结果输出二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页一、用法精讲271、pandas.Series.dt.dayofyear属性271-1、语法#271、pandas.Series.dt.dayofyear属性pandas.Series.dt.dayofyearTheordinaldayoftheyear.271-2、参数 无271-3、功能 用于从日期时间序列中提取一年中的第几天,具备同样功能的还有pandas.Series.dt.day_of_year属性。271-4、返回值 返回一个整数,表示一年中的序数日期,范围从1(1月1日)到365(或者在闰年中为366)。271-5、说明 使用场景:271-5-1、季节性分析:当你分析季节性趋势时,将日期转换为一年中的第几天有助于识别季节模式。比如,销售数据、气象数据和农业数据常常会受到季节性因素的影响。271-5-2、时间序列分组:在进行时间序列数据分组时,例如按天数汇总数据,可以使用这个属性来将数据按年中的天数进行分组,便于进一步分析或可视化。271-5-3、日期差异计算:在处理与日期相关的计算时,如计算两个日期之间的天数差异,使用这个属性可以帮助你将日期转换为易于比较的格式。271-5-4、数据对齐和合并:当你需要将多个时间序列数据对齐或者合并时,使用这一属性可以帮助你在同一年中的相对位置对齐数据。271-5-5、周期性特征工程:在机器学习建模时,将日期时间特征转换为一天中的第几天可以帮助模型学习周期性趋势,例如,预测天气或销售量。271-6、用法271-6-1、数据准备无271-6-2、代码示例#271、pandas.Series.dt.dayofyear属性#271-1、季节性分析importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt#创建示例数据dates=pd.date_range(start='2024-01-01',end='2024-12-31',freq='D')sales=np.random.rand(len(dates))*100data=pd.DataFrame({'Date':dates,'Sales':sales})#将日期转换为一年中的第几天data['DayOfYear']=data['Date'].dt.dayofyear#按天数汇总销售数据daily_sales=data.groupby('DayOfYear')['Sales'].mean()#绘制季节性趋势图plt.figure(figsize=(12,6))plt.plot(daily_sales.index,daily_sales.values)plt.title('SeasonalTrendofSalesData')plt.xlabel('DayofYear')plt.ylabel('AverageSales')plt.grid(True)plt.show()#271-2、时间序列分组importpandasaspd#创建示例数据dates=pd.date_range(start='2024-01-01',end='2024-12-31',freq='D')temperature=np.random.rand(len(dates))*30data=pd.DataFrame({'Date':dates,'Temperature':temperature})#将日期转换为一年中的第几天data['DayOfYear']=data['Date'].dt.dayofyear#按天数汇总温度数据daily_avg_temp=data.groupby('DayOfYear')['Temperature'].mean()print(daily_avg_temp.head(),end='\n\n')#271-3、日期差异计算importpandasaspd#创建示例日期date1=pd.Timestamp('2024-03-01')date2=pd.Timestamp('2024-08-15')#计算日期差异day_of_year1=date1.dayofyearday_of_year2=date2.dayofyeardays_difference=abs(day_of_year2-day_of_year1)print(f'Daysdifference:{days_difference}',end='\n\n')#271-4、数据对齐和合并importpandasaspdimportnumpyasnp#创建示例数据dates1=pd.date_range(start='2024-01-01',end='2024-06-30',freq='D')data1=pd.DataFrame({'Date':dates1,'Value1':np.random.rand(len(dates1))*100})dates2=pd.date_range(start='2024-07-01',end='2024-12-31',freq='D')data2=pd.DataFrame({'Date':dates2,'Value2':np.random.rand(len(dates2))*100})#将日期转换为一年中的第几天data1['DayOfYear']=data1['Date'].dt.dayofyeardata2['DayOfYear']=data2['Date'].dt.dayofyear#合并数据merged_data=pd.merge(data1[['DayOfYear','Value1']],data2[['DayOfYear','Value2']],on='DayOfYear',how='outer')print(merged_data.head(),end='\n\n')#271-5、周期性特征工程importpandasaspdimportnumpyasnp#创建示例数据dates=pd.date_range(start='2024-01-01',end='2024-12-31',freq='D')sales=np.random.rand(len(dates))*100data=pd.DataFrame({'Date':dates,'Sales':sales})#将日期转换为一年中的第几天data['DayOfYear']=data['Date'].dt.dayofyear#将DayOfYear转换为周期性特征(例如正弦和余弦)data['DayOfYear_Sin']=np.sin(2*np.pi*data['DayOfYear']/365)data['DayOfYear_Cos']=np.cos(2*np.pi*data['DayOfYear']/365)print(data[['Date','DayOfYear','DayOfYear_Sin','DayOfYear_Cos']].head())271-6-3、结果输出#271、pandas.Series.dt.dayofyear属性#271-1、季节性分析#见图1#271-2、时间序列分组#DayOfYear#14.654971#222.423349#316.145457#416.341184#523.362987#Name:Temperature,dtype:float64#271-3、日期差异计算#Daysdifference:167#271-4、数据对齐和合并#DayOfYearValue1Value2#0161.680196NaN#1240.421598NaN#232.239969NaN#3417.233058NaN#4534.516007NaN#271-5、周期性特征工程#DateDayOfYearDayOfYear_SinDayOfYear_Cos#02024-01-0110.0172130.999852#12024-01-0220.0344220.999407#22024-01-0330.0516200.998667#32024-01-0440.0688020.997630#42024-01-0550.0859650.996298图1:272、pandas.Series.dt.days_in_month属性272-1、语法#272、pandas.Series.dt.days_in_month属性pandas.Series.dt.days_in_monthThenumberofdaysinthemonth.272-2、参数 无272-3、功能 用于处理日期时间数据的属性,它能够返回每个日期所在月份的天数。272-4、返回值 返回一个整数类型的Series,其中每个元素代表对应日期所在月份的天数。272-5、说明 使用场景:272-5-1、财务分析:在财务分析中,特别是在处理月度财务报表时,了解每个月的天数是很重要的。例如,计算每月的销售额时,知道每个月有多少天可以帮助计算日均销售额或调整财务预测模型。272-5-2、时间序列数据处理:在处理时间序列数据时,某些统计计算可能需要考虑月份的天数。例如,计算某个月的平均气温或降水量时,需要调整数据以反映该月的实际天数。272-5-3、数据清理和验证:在数据清理过程中,可能需要检查日期数据的一致性。比如,确保生成的时间序列数据不会错误地包含不符合月份天数的日期。272-5-4、统计分析:在进行统计分析时,了解每个月的天数有助于进行更加精确的统计计算。比如,在计算每个月的事件发生频率时,知道每个月的天数可以帮助标准化数据。272-5-5、时间特征工程:在构建机器学习模型时,将月份的天数作为特征之一,可能对模型性能产生积极的影响。例如,在预测能源消耗或交通流量时,每个月的天数可能会影响预测结果。272-6、用法272-6-1、数据准备无272-6-2、代码示例#272、pandas.Series.dt.days_in_month属性#272-1、财务分析importpandasaspd#创建示例数据data={'date':pd.date_range(start='2024-01-01',periods=90,freq='D'),'sales':[100+iforiinrange(90)]#假设每天的销售额逐渐增加}df=pd.DataFrame(data)#计算每个月的总销售额df['month']=df['date'].dt.to_period('M')monthly_sales=df.groupby('month')['sales'].sum()#获取每个月的天数days_in_month=df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()#计算日均销售额daily_avg_sales=monthly_sales/days_in_monthprint(daily_avg_sales,end='\n\n')#272-2、时间序列数据处理importpandasaspdimportnumpyasnp#创建示例气温数据np.random.seed(0)dates=pd.date_range(start='2024-01-01',periods=90,freq='D')temperatures=np.random.normal(loc=20,scale=5,size=len(dates))#随机生成气温数据df=pd.DataFrame({'date':dates,'temperature':temperatures})#计算每个月的总气温df['month']=df['date'].dt.to_period('M')monthly_temp_sum=df.groupby('month')['temperature'].sum()#获取每个月的天数days_in_month=df['date'].dt.days_in_month.groupby(df['date'].dt.to_period('M')).first()#计算月均气温monthly_avg_temp=monthly_temp_sum/days_in_monthprint(monthly_avg_temp,end='\n\n')#272-3、数据清理和验证importpandasaspd#创建包含日期的示例数据dates=pd.Series(pd.to_datetime(['2024-01-31','2024-02-30','2024-03-15','2024-04-31'],errors='coerce'))#检查每个日期是否在该月有效valid_dates=dates[dates.dt.day
|
|