找回密码
 会员注册
查看: 19|回复: 0

Python酷库之旅-第三方库Pandas(072)

[复制链接]

4

主题

0

回帖

13

积分

新手上路

积分
13
发表于 2024-9-10 02:54:09 | 显示全部楼层 |阅读模式
目录一、用法精讲291、pandas.Series.dt.round函数291-1、语法291-2、参数291-3、功能291-4、返回值291-5、说明291-6、用法291-6-1、数据准备291-6-2、代码示例291-6-3、结果输出292、pandas.Series.dt.floor函数292-1、语法292-2、参数292-3、功能292-4、返回值292-5、说明292-6、用法292-6-1、数据准备292-6-2、代码示例292-6-3、结果输出293、pandas.Series.dt.ceil函数293-1、语法293-2、参数293-3、功能293-4、返回值293-5、说明293-6、用法293-6-1、数据准备293-6-2、代码示例293-6-3、结果输出294、pandas.Series.dt.month_name方法294-1、语法294-2、参数294-3、功能294-4、返回值294-5、说明294-6、用法294-6-1、数据准备294-6-2、代码示例294-6-3、结果输出295、pandas.Series.dt.day_name方法295-1、语法295-2、参数295-3、功能295-4、返回值295-5、说明295-6、用法295-6-1、数据准备295-6-2、代码示例295-6-3、结果输出二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页一、用法精讲291、pandas.Series.dt.round函数291-1、语法#291、pandas.Series.dt.round函数pandas.Series.dt.round(*args,**kwargs)Performroundoperationonthedatatothespecifiedfreq.Parameters:freqstrorOffsetThefrequencyleveltoroundtheindexto.Mustbeafixedfrequencylike‘S’(second)not‘ME’(monthend).Seefrequencyaliasesforalistofpossiblefreqvalues.ambiguous‘infer’,bool-ndarray,‘NaT’,default‘raise’OnlyrelevantforDatetimeIndex:‘infer’willattempttoinferfalldst-transitionhoursbasedonorderbool-ndarraywhereTruesignifiesaDSTtime,Falsedesignatesanon-DSTtime(notethatthisflagisonlyapplicableforambiguoustimes)‘NaT’willreturnNaTwherethereareambiguoustimes‘raise’willraiseanAmbiguousTimeErrorifthereareambiguoustimes.nonexistent‘shift_forward’,‘shift_backward’,‘NaT’,timedelta,default‘raise’AnonexistenttimedoesnotexistinaparticulartimezonewhereclocksmovedforwardduetoDST.‘shift_forward’willshiftthenonexistenttimeforwardtotheclosestexistingtime‘shift_backward’willshiftthenonexistenttimebackwardtotheclosestexistingtime‘NaT’willreturnNaTwheretherearenonexistenttimestimedeltaobjectswillshiftnonexistenttimesbythetimedelta‘raise’willraiseanNonExistentTimeErroriftherearenonexistenttimes.ReturnsatetimeIndex,TimedeltaIndex,orSeriesIndexofthesametypeforaDatetimeIndexorTimedeltaIndex,oraSerieswiththesameindexforaSeries.Raises:ValueErrorifthefreqcannotbeconverted.NotesIfthetimestampshaveatimezone,roundingwilltakeplacerelativetothelocal(“wall”)timeandre-localizedtothesametimezone.Whenroundingneardaylightsavingstime,usenonexistentandambiguoustocontrolthere-localizationbehavior.291-2、参数291-2-1、freq(必须):strorDateOffset,指定要四舍五入到的时间频率,常见的频率字符串包括:s:秒min:分钟h:小时D:天W:周M:月Q:季度A:年291-2-2、ambiguous(可选,默认值为'raise'):用于处理夏令时转换时的模棱两可的时间。默认情况下,如果时间不明确,会引发错误。可以选择以下选项之一:'raise':如果遇到不明确的时间,则引发错误。'NaT':将不明确的时间设置为NaT。boolarray:具有与时间戳相同长度的布尔数组,指示每个时间戳是否为夏令时。291-2-3、nonexistent(可选,默认值为'raise'):用于处理不存在的时间,例如从夏令时到标准时间的转换。默认情况下,如果时间不存在,会引发错误。可以选择以下选项之一:'raise':如果遇到不存在的时间,则引发错误。'NaT':将不存在的时间设置为NaT。timedelta:使用给定的时间差调整不存在的时间。291-3、功能        用于将datetime数据四舍五入到最近的指定频率。例如,可以将datetime数据四舍五入到最近的秒、分钟、小时等,这对于需要标准化时间戳数据或进行时间间隔计算时非常有用。291-4、返回值        返回一个新的Series,其中包含四舍五入到指定频率的datetime数据。291-5、说明    使用场景:291-5-1、数据标准化和对齐:在处理时间序列数据时,经常需要将时间戳对齐到统一的频率,以便进行进一步的分析和处理。例如,将不同时间戳对齐到最近的整点、整分或整秒,以便对不同时间序列进行比较或合并。291-5-2、处理高频数据:在金融数据分析中,经常会处理高频交易数据,为了简化分析过程,可以将这些高频数据(如毫秒级别的交易数据)四舍五入到秒、分钟或小时级别,以便于观察趋势和模式。291-5-3、生成时间窗口:在生成固定长度的时间窗口时,可以使用该方法将时间戳四舍五入到最近的窗口边界。例如,在生成按分钟分组的窗口时,可以将时间戳四舍五入到最近的分钟。291-5-4、数据清理和预处理:在数据清理过程中,经常需要处理不精确的时间戳数据,通过将时间戳四舍五入到最近的标准时间,可以消除小的误差,使数据更加整洁和一致。291-5-5、数据聚合:在对时间序列数据进行聚合操作(如计算平均值、总和等)之前,通常需要将时间戳对齐到同一频率。例如,在按小时聚合数据时,可以先将时间戳四舍五入到最近的小时。291-6、用法291-6-1、数据准备无291-6-2、代码示例#291、pandas.Series.dt.round方法#291-1、天气数据分析importpandasaspd#创建示例天气数据weather_data=pd.DataFrame({'timestamp':pd.to_datetime(['2024-08-0714:35:29','2024-08-0714:35:45','2024-08-0714:36:12']),'temperature':[25.3,25.5,25.7]})#将时间戳四舍五入到最近的分钟weather_data['rounded_timestamp']=weather_data['timestamp'].dt.round('min')#按照四舍五入后的时间戳计算每分钟的平均温度average_temperature_per_minute=weather_data.groupby('rounded_timestamp')['temperature'].mean().reset_index()print("每分钟的平均温度:")print(average_temperature_per_minute,end='\n\n')#291-2、交通流量分析importpandasaspd#创建示例交通流量数据traffic_data=pd.DataFrame({'timestamp':pd.to_datetime(['2024-08-0708:15:12','2024-08-0708:16:45','2024-08-0708:17:59']),'vehicle_count':[15,20,25]})#将时间戳四舍五入到最近的小时traffic_data['rounded_timestamp']=traffic_data['timestamp'].dt.round('h')#按照四舍五入后的时间戳计算每小时的车流量总数vehicle_count_per_hour=traffic_data.groupby('rounded_timestamp')['vehicle_count'].sum().reset_index()print("每小时的车流量总数:")print(vehicle_count_per_hour,end='\n\n')#291-3、股票交易数据分析importpandasaspd#创建示例股票交易数据trade_data=pd.DataFrame({'timestamp':pd.to_datetime(['2024-08-0709:00:01.123','2024-08-0709:00:02.456','2024-08-0709:00:03.789']),'trade_amount':[1000,1500,2000]})#将时间戳四舍五入到最近的秒trade_data['rounded_timestamp']=trade_data['timestamp'].dt.round('s')#按照四舍五入后的时间戳计算每秒的交易总金额trade_amount_per_second=trade_data.groupby('rounded_timestamp')['trade_amount'].sum().reset_index()print("每秒的交易总金额:")print(trade_amount_per_second,end='\n\n')#291-4、制造业生产数据分析importpandasaspd#创建示例制造业生产数据production_data=pd.DataFrame({'timestamp':pd.to_datetime(['2024-08-0710:12:34','2024-08-0710:45:21','2024-08-0711:02:45']),'quantity':[100,200,150]})#将时间戳四舍五入到最近的小时production_data['rounded_timestamp']=production_data['timestamp'].dt.round('h')#按照四舍五入后的时间戳计算每小时的生产数量quantity_per_hour=production_data.groupby('rounded_timestamp')['quantity'].sum().reset_index()print("每小时的生产数量:")print(quantity_per_hour,end='\n\n')#291-5、网站访问数据分析importpandasaspd#创建示例网站访问数据visit_data=pd.DataFrame({'timestamp':pd.to_datetime(['2024-08-0715:03:45','2024-08-0715:04:15','2024-08-0715:04:35']),'user_id':[101,102,103]})#将时间戳四舍五入到最近的分钟visit_data['rounded_timestamp']=visit_data['timestamp'].dt.round('min')#按照四舍五入后的时间戳计算每分钟的访问量visit_count_per_minute=visit_data.groupby('rounded_timestamp')['user_id'].count().reset_index()print("每分钟的访问量:")print(visit_count_per_minute,end='\n\n')#291-6、电力消耗数据分析importpandasaspd#创建示例电力消耗数据power_consumption_data=pd.DataFrame({'timestamp':pd.to_datetime(['2024-08-0701:45:00','2024-08-0713:30:00','2024-08-0802:15:00']),'power_consumption':[120,150,130]})#将时间戳四舍五入到最近的一天power_consumption_data['rounded_timestamp']=power_consumption_data['timestamp'].dt.round('D')#按照四舍五入后的时间戳计算每天的电力消耗总量daily_power_consumption=power_consumption_data.groupby('rounded_timestamp')['power_consumption'].sum().reset_index()print("每天的电力消耗总量:")print(daily_power_consumption)291-6-3、结果输出#291、pandas.Series.dt.round方法#291-1、天气数据分析#每分钟的平均温度:#rounded_timestamptemperature#02024-08-0714:35:0025.3#12024-08-0714:36:0025.6#291-2、交通流量分析#每小时的车流量总数:#rounded_timestampvehicle_count#02024-08-0708:00:0060#291-3、股票交易数据分析#每秒的交易总金额:#rounded_timestamptrade_amount#02024-08-0709:00:011000#12024-08-0709:00:021500#22024-08-0709:00:042000#291-4、制造业生产数据分析#每小时的生产数量:#rounded_timestampquantity#02024-08-0710:00:00100#12024-08-0711:00:00350#291-5、网站访问数据分析#每分钟的访问量:#rounded_timestampuser_id#02024-08-0715:04:002#12024-08-0715:05:001#291-6、电力消耗数据分析#每天的电力消耗总量:#rounded_timestamppower_consumption#02024-08-07120#12024-08-08280292、pandas.Series.dt.floor函数292-1、语法#292、pandas.Series.dt.floor函数pandas.Series.dt.floor(*args,**kwargs)Performflooroperationonthedatatothespecifiedfreq.Parameters:freqstrorOffsetThefrequencyleveltofloortheindexto.Mustbeafixedfrequencylike‘S’(second)not‘ME’(monthend).Seefrequencyaliasesforalistofpossiblefreqvalues.ambiguous‘infer’,bool-ndarray,‘NaT’,default‘raise’OnlyrelevantforDatetimeIndex:‘infer’willattempttoinferfalldst-transitionhoursbasedonorderbool-ndarraywhereTruesignifiesaDSTtime,Falsedesignatesanon-DSTtime(notethatthisflagisonlyapplicableforambiguoustimes)‘NaT’willreturnNaTwherethereareambiguoustimes‘raise’willraiseanAmbiguousTimeErrorifthereareambiguoustimes.nonexistent‘shift_forward’,‘shift_backward’,‘NaT’,timedelta,default‘raise’AnonexistenttimedoesnotexistinaparticulartimezonewhereclocksmovedforwardduetoDST.‘shift_forward’willshiftthenonexistenttimeforwardtotheclosestexistingtime‘shift_backward’willshiftthenonexistenttimebackwardtotheclosestexistingtime‘NaT’willreturnNaTwheretherearenonexistenttimestimedeltaobjectswillshiftnonexistenttimesbythetimedelta‘raise’willraiseanNonExistentTimeErroriftherearenonexistenttimes.ReturnsatetimeIndex,TimedeltaIndex,orSeriesIndexofthesametypeforaDatetimeIndexorTimedeltaIndex,oraSerieswiththesameindexforaSeries.Raises:ValueErrorifthefreqcannotbeconverted.NotesIfthetimestampshaveatimezone,flooringwilltakeplacerelativetothelocal(“wall”)timeandre-localizedtothesametimezone.Whenflooringneardaylightsavingstime,usenonexistentandambiguoustocontrolthere-localizationbehavior.292-2、参数292-2-1、freq(必须):strorDateOffset,指定要四舍五入到的时间频率,常见的频率字符串包括:s:秒min:分钟h:小时D:天W:周M:月Q:季度A:年292-2-2、ambiguous(可选,默认值为'raise'):用于处理夏令时转换时的模棱两可的时间。默认情况下,如果时间不明确,会引发错误。可以选择以下选项之一:'raise':如果遇到不明确的时间,则引发错误。'NaT':将不明确的时间设置为NaT。boolarray:具有与时间戳相同长度的布尔数组,指示每个时间戳是否为夏令时。292-2-3、nonexistent(可选,默认值为'raise'):用于处理不存在的时间,例如从夏令时到标准时间的转换。默认情况下,如果时间不存在,会引发错误。可以选择以下选项之一:'raise':如果遇到不存在的时间,则引发错误。'NaT':将不存在的时间设置为NaT。timedelta:使用给定的时间差调整不存在的时间。292-3、功能        将每个时间戳向下取整到指定的时间频率。例如,如果我们有一系列时间戳,并希望将它们对齐到最近的小时,我们可以使用floor('h')。292-4、返回值        返回一个新的pandas.Series对象,其中的每个时间戳都被向下取整到指定频率,原始的Series对象不会被修改。292-5、说明    使用场景:292-5-1、时间对齐:在进行时间序列分析时,数据可能来自不同的源,并且时间戳不完全一致,使用floor方法可以将这些时间戳对齐到统一的时间间隔,从而简化数据的合并和比较。292-5-2、数据聚合:当需要对时间序列数据进行聚合分析时,如按小时、天、周等频率计算平均值或总和,floor方法可以帮助将时间戳对齐到这些频率,之后可以使用groupby和聚合函数进行分析。292-5-3、异常值处理:在处理时间序列数据时,可能会遇到一些不规则的时间戳,使用floor方法可以将这些不规则的时间戳对齐到标准的时间间隔,便于后续的异常值处理。292-5-4、缺失值填充:通过将时间序列对齐到固定的时间间隔,可以方便地识别和填充缺失值。例如,可以使用reindex方法创建一个完整的时间索引,然后填充缺失的数据。292-5-5、滚动窗口计算:在时间序列分析中,经常需要计算滚动窗口统计量(如滚动平均值),floor方法可以帮助将时间对齐,从而简化滚动窗口计算的过程。292-5-6、实时数据流处理:在处理实时数据流时,经常需要将数据按固定的时间间隔进行处理,floor方法可以帮助将实时数据对齐到固定的时间窗口,从而简化实时数据的处理逻辑。292-6、用法292-6-1、数据准备无292-6-2、代码示例#292、pandas.Series.dt.floor函数#292-1、时间对齐importpandasaspd#示例数据timestamps=pd.Series(pd.to_datetime(['2024-08-0710:15:30','2024-08-0710:45:15','2024-08-0711:05:45']))floored_hours=timestamps.dt.floor('h')print(floored_hours,end='\n\n')#292-2、数据聚合importpandasaspd#示例数据data={'timestamp':pd.to_datetime(['2024-08-0710:15:30','2024-08-0710:45:15','2024-08-0711:05:45']),'value':[10,20,30]}df=pd.DataFrame(data)df['floored_hour']=df['timestamp'].dt.floor('h')aggregated=df.groupby('floored_hour')['value'].sum()print(aggregated,end='\n\n')#292-3、异常值处理importpandasaspd#示例数据timestamps=pd.Series(pd.to_datetime(['2024-08-0710:15:30','2024-08-0710:45:15','2024-08-0711:05:45']))floored_minutes=timestamps.dt.floor('min')print(floored_minutes,end='\n\n')#292-4、缺失值填充importpandasaspd#示例数据timestamps=pd.date_range('2024-08-0710:00:00',periods=3,freq='h')values=[10,None,30]df=pd.DataFrame({'timestamp':timestamps,'value':values})df.set_index('timestamp',inplace=True)df=df.reindex(pd.date_range('2024-08-0710:00:00','2024-08-0712:00:00',freq='h'))df['value'].fillna(method='ffill',inplace=True)print(df,end='\n\n')#292-5、滚动窗口计算importpandasaspd#示例数据data=pd.Series([10,20,30],index=pd.to_datetime(['2024-08-0710:15:30','2024-08-0710:45:15','2024-08-0711:05:45']))floored_data=data.groupby(data.index.floor('h')).sum()rolling_mean=floored_data.rolling(window=2).mean()print(rolling_mean,end='\n\n')#292-6、实时数据流处理importpandasaspdimportnumpyasnp#模拟实时数据流timestamps=pd.Series(pd.to_datetime(['2024-08-0710:15:30','2024-08-0710:45:15','2024-08-0711:05:45']))values=pd.Series(np.random.randn(len(timestamps)))#对齐到最近的分钟floored_minutes=timestamps.dt.floor('min')real_time_df=pd.DataFrame({'timestamp':floored_minutes,'value':values})print(real_time_df)292-6-3、结果输出#292、pandas.Series.dt.floor函数#292-1、时间对齐#02024-08-0710:00:00#12024-08-0710:00:00#22024-08-0711:00:00#dtype:datetime64[ns]#292-2、数据聚合#floored_hour#2024-08-0710:00:0030#2024-08-0711:00:0030#Name:value,dtype:int64#292-3、异常值处理#02024-08-0710:15:00#12024-08-0710:45:00#22024-08-0711:05:00#dtype:datetime64[ns]#292-4、缺失值填充#value#2024-08-0710:00:0010.0#2024-08-0711:00:0010.0#2024-08-0712:00:0030.0#292-5、滚动窗口计算#2024-08-0710:00:00NaN#2024-08-0711:00:0030.0#dtype:float64#292-6、实时数据流处理#timestampvalue#02024-08-0710:15:00-1.294484#12024-08-0710:45:00-1.846297#22024-08-0711:05:00-2.314171293、pandas.Series.dt.ceil函数293-1、语法#293、pandas.Series.dt.ceil函数pandas.Series.dt.ceil(*args,**kwargs)Performceiloperationonthedatatothespecifiedfreq.Parameters:freqstrorOffsetThefrequencyleveltoceiltheindexto.Mustbeafixedfrequencylike‘S’(second)not‘ME’(monthend).Seefrequencyaliasesforalistofpossiblefreqvalues.ambiguous‘infer’,bool-ndarray,‘NaT’,default‘raise’OnlyrelevantforDatetimeIndex:‘infer’willattempttoinferfalldst-transitionhoursbasedonorderbool-ndarraywhereTruesignifiesaDSTtime,Falsedesignatesanon-DSTtime(notethatthisflagisonlyapplicableforambiguoustimes)‘NaT’willreturnNaTwherethereareambiguoustimes‘raise’willraiseanAmbiguousTimeErrorifthereareambiguoustimes.nonexistent‘shift_forward’,‘shift_backward’,‘NaT’,timedelta,default‘raise’AnonexistenttimedoesnotexistinaparticulartimezonewhereclocksmovedforwardduetoDST.‘shift_forward’willshiftthenonexistenttimeforwardtotheclosestexistingtime‘shift_backward’willshiftthenonexistenttimebackwardtotheclosestexistingtime‘NaT’willreturnNaTwheretherearenonexistenttimestimedeltaobjectswillshiftnonexistenttimesbythetimedelta‘raise’willraiseanNonExistentTimeErroriftherearenonexistenttimes.ReturnsatetimeIndex,TimedeltaIndex,orSeriesIndexofthesametypeforaDatetimeIndexorTimedeltaIndex,oraSerieswiththesameindexforaSeries.Raises:ValueErrorifthefreqcannotbeconverted.NotesIfthetimestampshaveatimezone,ceilingwilltakeplacerelativetothelocal(“wall”)timeandre-localizedtothesametimezone.Whenceilingneardaylightsavingstime,usenonexistentandambiguoustocontrolthere-localizationbehavior.293-2、参数293-2-1、freq(必须):strorDateOffset,指定要四舍五入到的时间频率,常见的频率字符串包括:s:秒min:分钟h:小时D:天W:周M:月Q:季度A:年293-2-2、ambiguous(可选,默认值为'raise'):用于处理夏令时转换时的模棱两可的时间。默认情况下,如果时间不明确,会引发错误。可以选择以下选项之一:'raise':如果遇到不明确的时间,则引发错误。'NaT':将不明确的时间设置为NaT。boolarray:具有与时间戳相同长度的布尔数组,指示每个时间戳是否为夏令时。293-2-3、nonexistent(可选,默认值为'raise'):用于处理不存在的时间,例如从夏令时到标准时间的转换。默认情况下,如果时间不存在,会引发错误。可以选择以下选项之一:'raise':如果遇到不存在的时间,则引发错误。'NaT':将不存在的时间设置为NaT。timedelta:使用给定的时间差调整不存在的时间。293-3、功能        用于将时间序列中的每个时间戳向上取整到最近的指定频率。例如,如果将一个时间序列取整到小时,那么所有分钟和秒的信息都会被抹去,每个时间戳都会向上取整到下一个整点小时。293-4、返回值        返回值是一个pandas.Series对象,包含了将原时间序列的每个时间戳向上取整到最近频率的时间戳。293-5、说明    使用场景:293-5-1、数据预处理:在处理时间序列数据时,有时候需要将时间戳标准化为相同的频率,以便进行后续分析。比如,将交易数据、传感器数据等按小时或天进行汇总分析。293-5-2、时间间隔对齐:在计算时间间隔时,可能需要将时间戳向上取整到最近的频率,以确保时间间隔的一致性。例如,在计算每日、每小时的平均值、总和等统计数据时,可以使用该函数将时间戳对齐到整点。293-5-3、可视化:在进行时间序列数据的可视化时,将时间戳向上取整到最近的频率可以使图表更易读。例如,将数据按小时或天进行聚合后再绘图,可以减少图表的复杂度,提高可读性。293-5-4、数据合并:在合并多个时间序列数据时,可能需要将时间戳对齐到相同的频率,以便进行合并和比较。例如,将不同来源的传感器数据合并到同一个时间轴上,可以使用该函数将所有时间戳对齐到最近的整点。293-6、用法293-6-1、数据准备无293-6-2、代码示例#293、pandas.Series.dt.ceil函数#293-1、数据预处理importpandasaspd#示例数据:传感器数据data={'timestamp':['2024-08-0708:45:00','2024-08-0708:50:00','2024-08-0709:05:00','2024-08-0709:15:00','2024-08-0710:05:00'],'value':[10,12,13,15,20]}df=pd.DataFrame(data)df['timestamp']=pd.to_datetime(df['timestamp'])#将时间戳向上取整到最近的小时df['rounded_timestamp']=df['timestamp'].dt.ceil('h')#按小时汇总数据hourly_summary=df.groupby('rounded_timestamp')['value'].sum().reset_index()print(hourly_summary,end='\n\n')#293-2、时间间隔对齐importpandasaspd#示例数据:交易数据trade_data={'trade_time':['2024-08-0710:15:25','2024-08-0710:15:35','2024-08-0710:15:45','2024-08-0710:16:00','2024-08-0710:16:20'],'price':[100,101,102,103,104]}trade_df=pd.DataFrame(trade_data)trade_df['trade_time']=pd.to_datetime(trade_df['trade_time'])#将时间戳向上取整到最近的分钟trade_df['aligned_time']=trade_df['trade_time'].dt.ceil('min')print(trade_df,end='\n\n')#293-3、可视化importmatplotlib.pyplotasplt#示例数据:网页访问数据visit_data={'visit_time':['2024-08-0112:34:56','2024-08-0114:22:33','2024-08-0209:18:45','2024-08-0210:12:34','2024-08-0316:45:12'],'visits':[1,1,1,1,1]}visit_df=pd.DataFrame(visit_data)visit_df['visit_time']=pd.to_datetime(visit_df['visit_time'])#将时间戳向上取整到最近的天visit_df['day']=visit_df['visit_time'].dt.ceil('D')#按天汇总数据daily_visits=visit_df.groupby('day')['visits'].sum().reset_index()#可视化plt.figure(figsize=(10,5))plt.plot(daily_visits['day'],daily_visits['visits'],marker='o')plt.xlabel('Date')plt.ylabel('NumberofVisits')plt.title('DailyWebVisits')plt.grid(True)plt.show()#293-4、数据合并importpandasaspd#示例数据:传感器A数据sensor_a_data={'timestamp':['2024-08-0710:15:25','2024-08-0710:35:12','2024-08-0710:55:45'],'sensor_a_value':[0.1,0.3,0.5]}sensor_a_df=pd.DataFrame(sensor_a_data)sensor_a_df['timestamp']=pd.to_datetime(sensor_a_df['timestamp'])sensor_a_df['timestamp']=sensor_a_df['timestamp'].dt.ceil('h')#示例数据:传感器B数据sensor_b_data={'timestamp':['2024-08-0711:05:21','2024-08-0711:22:33'],'sensor_b_value':[0.6,0.7]}sensor_b_df=pd.DataFrame(sensor_b_data)sensor_b_df['timestamp']=pd.to_datetime(sensor_b_df['timestamp'])sensor_b_df['timestamp']=sensor_b_df['timestamp'].dt.ceil('h')#合并数据merged_df=pd.merge(sensor_a_df,sensor_b_df,on='timestamp',how='outer')print(merged_df,end='\n\n')293-6-3、结果输出#293、pandas.Series.dt.ceil函数#293-1、数据预处理#rounded_timestampvalue#02024-08-0709:00:0022#12024-08-0710:00:0028#22024-08-0711:00:0020#293-2、时间间隔对齐#trade_timepricealigned_time#02024-08-0710:15:251002024-08-0710:16:00#12024-08-0710:15:351012024-08-0710:16:00#22024-08-0710:15:451022024-08-0710:16:00#32024-08-0710:16:001032024-08-0710:16:00#42024-08-0710:16:201042024-08-0710:17:00#293-3、可视化#见图1#293-4、数据合并#timestampsensor_a_valuesensor_b_value#02024-08-0711:00:000.1NaN#12024-08-0711:00:000.3NaN#22024-08-0711:00:000.5NaN#32024-08-0712:00:00NaN0.6#42024-08-0712:00:00NaN0.7图1:294、pandas.Series.dt.month_name方法294-1、语法#294、pandas.Series.dt.month_name方法pandas.Series.dt.month_name(*args,**kwargs)Returnthemonthnameswithspecifiedlocale.Parameters:localestr,optionalLocaledeterminingthelanguageinwhichtoreturnthemonthname.DefaultisEnglishlocale('en_US.utf8').Usethecommandlocale-aonyourterminalonUnixsystemstofindyourlocalelanguagecode.Returns:SeriesorIndexSeriesorIndexofmonthnames.294-2、参数294-2-1、*args(可选):其他位置参数,为后续扩展功能做预留。294-2-2、**kwargs(可选):其他关键字参数,为后续扩展功能做预留。294-2-2-1、locale(可选):指定返回的月份名称的语言环境。例如,“en”表示英语,“fr”表示法语。默认情况下,返回值是根据当前系统的默认语言环境生成的。294-3、功能        用于返回datetime类型的Series对象中每个日期的月份名称,且这些名称是以字符串的形式返回的,例如“January”、“February”等。294-4、返回值        返回一个pandas.Series对象,其中包含每个日期的月份名称。294-5、说明    使用场景:294-5-1、数据可视化:在绘制时间序列图或统计图时,可以使用月份名称来标签和分类数据,使图表更具可读性。例如,绘制每个月的销售额图表时,使用月份名称作为x轴标签。294-5-2、报告和分析:在生成数据报告时,可能需要按月份分组数据。将日期转换为月份名称可以帮助更直观地展示每个月的数据汇总和趋势。294-5-3、数据清洗和预处理:在数据清洗过程中,可能需要将时间戳数据转换为更易于分析的格式,将日期转换为月份名称可以帮助将数据按月份进行聚合或分析。294-5-4、市场分析:对于销售数据、用户活动数据等,可以按月份进行分析,以识别季节性趋势、销售高峰期或用户行为模式。294-5-5、客户和用户行为分析:分析客户行为时,月份名称可以帮助识别客户在不同月份的活动模式或趋势,进而调整营销策略或活动计划。294-5-6、财务和业务计划:企业在进行财务分析和业务计划时,需要按月份跟踪和预测各种财务指标,如收入、支出和利润等。294-6、用法294-6-1、数据准备无294-6-2、代码示例#294、pandas.Series.dt.month_name方法#294-1、数据可视化importmatplotlib.pyplotaspltimportpandasaspd#创建示例数据data={'date':pd.date_range(start='2024-01-01',periods=12,freq='ME'),'sales':[200,220,250,270,300,320,280,310,330,340,360,380]}df=pd.DataFrame(data)#添加月份名称列df['month']=df['date'].dt.month_name()#绘制图表plt.figure(figsize=(10,6))plt.plot(df['month'],df['sales'],marker='o',color='purple')plt.xlabel('Month')plt.ylabel('Sales')plt.title('MonthlySales')plt.xticks(rotation=45)plt.grid(True)#添加数据标签fori,valueinenumerate(df['sales']):plt.text(i,value+5,str(value),ha='center',va='bottom',color='red',fontweight='bold')#在每个点上方显示标签并加粗plt.show()#294-2、报告和分析importpandasaspd#创建示例数据data={'date':pd.date_range(start='2024-01-01',periods=12,freq='ME'),'sales':[200,220,250,270,300,320,280,310,330,340,360,380]}df=pd.DataFrame(data)monthly_sales=df.groupby(df['date'].dt.month_name())['sales'].sum().reset_index()monthly_sales.columns=['Month','TotalSales']print(monthly_sales,end='\n\n')#294-3、数据清洗和预处理importpandasaspd#创建示例数据data={'date':pd.date_range(start='2024-01-01',periods=12,freq='ME'),'sales':[200,220,250,270,300,320,280,310,330,340,360,380]}df=pd.DataFrame(data)df['month_name']=df['date'].dt.month_name()print(df,end='\n\n')#294-4、市场分析importpandasaspd#创建示例数据data={'date':pd.date_range(start='2024-01-01',periods=12,freq='ME'),'sales':[200,220,250,270,300,320,280,310,330,340,360,380]}df=pd.DataFrame(data)monthly_summary=df.groupby(df['date'].dt.month_name()).agg({'sales':['mean','median','max']}).reset_index()print(monthly_summary,end='\n\n')#294-5、客户和用户行为分析importpandasaspd#示例数据user_data={'activity_date':pd.date_range(start='2024-01-01',periods=30,freq='D'),'user_id':range(1,31)}user_df=pd.DataFrame(user_data)#添加月份名称列user_df['month']=user_df['activity_date'].dt.month_name()#按月份统计用户活动次数activity_summary=user_df.groupby('month').size().reset_index(name='activity_count')print(activity_summary,end='\n\n')#294-6、财务和业务计划importpandasaspd#示例财务数据financial_data={'date':pd.date_range(start='2024-01-01',periods=12,freq='ME'),'revenue':[1000,1100,1200,1300,1400,1500,1600,1700,1800,1900,2000,2100]}financial_df=pd.DataFrame(financial_data)#添加月份名称列financial_df['month']=financial_df['date'].dt.month_name()#按月份汇总收入monthly_revenue=financial_df.groupby('month')['revenue'].sum().reset_index()print(monthly_revenue)294-6-3、结果输出#294、pandas.Series.dt.month_name方法#294-1、数据可视化#见图2#294-2、报告和分析#MonthTotalSales#0April270#1August310#2December380#3February220#4January200#5July280#6June320#7March250#8May300#9November360#10October340#11September330#294-3、数据清洗和预处理#datesalesmonth_name#02024-01-31200January#12024-02-29220February#22024-03-31250March#32024-04-30270April#42024-05-31300May#52024-06-30320June#62024-07-31280July#72024-08-31310August#82024-09-30330September#92024-10-31340October#102024-11-30360November#112024-12-31380December#294-4、市场分析#datesales#meanmedianmax#0April270.0270.0270#1August310.0310.0310#2December380.0380.0380#3February220.0220.0220#4January200.0200.0200#5July280.0280.0280#6June320.0320.0320#7March250.0250.0250#8May300.0300.0300#9November360.0360.0360#10October340.0340.0340#11September330.0330.0330#294-5、客户和用户行为分析#monthactivity_count#0January30#294-6、财务和业务计划#monthrevenue#0April1300#1August1700#2December2100#3February1100#4January1000#5July1600#6June1500#7March1200#8May1400#9November2000#10October1900#11September1800图2: 295、pandas.Series.dt.day_name方法295-1、语法#295、pandas.Series.dt.day_name方法pandas.Series.dt.day_name(*args,**kwargs)Returnthedaynameswithspecifiedlocale.Parameters:localestr,optionalLocaledeterminingthelanguageinwhichtoreturnthedayname.DefaultisEnglishlocale('en_US.utf8').Usethecommandlocale-aonyourterminalonUnixsystemstofindyourlocalelanguagecode.Returns:SeriesorIndexSeriesorIndexofdaynames.295-2、参数295-2-1、*args(可选):其他位置参数,为后续扩展功能做预留。295-2-2、**kwargs(可选):其他关键字参数,为后续扩展功能做预留。295-2-2-1、locale(可选):指定返回的月份名称的语言环境。例如,“en”表示英语,“fr”表示法语。默认情况下,返回值是根据当前系统的默认语言环境生成的。295-3、功能        提取日期时间数据中的星期几名称。如,给定一个日期2024-08-08,它会返回"Thursday"。295-4、返回值        返回一个包含星期几名称的Series对象,字符串类型,例如"Monday"、"Tuesday"等。295-5、说明    使用场景:295-5-1、数据分析:在进行时间序列分析时,提取星期几名称可以帮助识别数据的周期性模式。例如,销售数据可能在周末和工作日有不同的趋势。295-5-2、可视化:当创建基于日期的图表时,使用星期几名称可以使图表更具可读性,便于观察不同星期几的表现。295-5-3、报表生成:在生成日报或周报时,显示具体的星期几可以让读者更清晰地理解数据的上下文。295-5-4、事件调度:在安排活动或任务时,了解每个日期是星期几可以帮助选择合适的时间。例如,某些活动可能更适合在周末进行。295-5-5、数据清洗:在处理包含日期的原始数据时,可以通过提取星期几来过滤或标记特定日期的数据,以便后续分析。295-5-6、用户行为分析:在分析用户行为时,了解用户在不同星期几的活动情况,可以帮助优化营销策略和产品推荐。295-6、用法295-6-1、数据准备无295-6-2、代码示例#295、pandas.Series.dt.day_name方法#295-1、数据分析importpandasaspd#创建示例销售数据data={'date':pd.date_range(start='2024-08-01',periods=10),'sales':[200,300,250,400,500,600,700,800,900,1000]}df=pd.DataFrame(data)#提取星期几名称df['day_name']=df['date'].dt.day_name()#按星期几汇总销售数据sales_by_day=df.groupby('day_name')['sales'].sum().sort_index()print(sales_by_day,end='\n\n')#295-2、可视化importmatplotlib.pyplotaspltimportpandasaspd#创建示例销售数据data={'date':pd.date_range(start='2024-08-01',periods=10),'sales':[200,300,250,400,500,600,700,800,900,1000]}df=pd.DataFrame(data)#提取星期几名称df['day_name']=df['date'].dt.day_name()#使用前面的数据sales_by_day=df.groupby('day_name')['sales'].sum().sort_index()#绘制柱状图sales_by_day.plot(kind='bar',color='green')plt.title('SalesbyDayoftheWeek')plt.xlabel('DayoftheWeek')plt.ylabel('TotalSales')plt.xticks(rotation=15,color='blue')plt.show()#295-3、报表生成importpandasaspd#创建示例销售数据data={'date':pd.date_range(start='2024-08-01',periods=10),'sales':[200,300,250,400,500,600,700,800,900,1000]}df=pd.DataFrame(data)#创建日报report=df[['date','sales']]report['day_name']=report['date'].dt.day_name()#打印日报print(report,end='\n\n')#295-4、事件调度importpandasaspd#假设我们有一组活动数据events={'event':['EventA','EventB','EventC','EventD'],'date':pd.to_datetime(['2024-08-03','2024-08-05','2024-08-06','2024-08-07'])}events_df=pd.DataFrame(events)#添加星期几名称events_df['day_name']=events_df['date'].dt.day_name()#过滤出周末的活动weekend_events=events_df[events_df['day_name'].isin(['Saturday','Sunday'])]print(weekend_events,end='\n\n')#295-5、数据清洗importpandasaspd#假设我们有一组原始数据raw_data={'date':pd.date_range(start='2024-08-01',periods=10),'value':[1,2,3,4,5,6,7,8,9,10]}raw_df=pd.DataFrame(raw_data)#添加星期几名称raw_df['day_name']=raw_df['date'].dt.day_name()#添加一列标记周末raw_df['is_weekend']=raw_df['day_name'].isin(['Saturday','Sunday'])print(raw_df,end='\n\n')#295-6、用户行为分析importpandasaspd#假设我们有用户行为数据user_activity={'user_id':[1,1,2,2,3,3],'activity_date':pd.to_datetime(['2024-08-01','2024-08-02','2024-08-03','2024-08-04','2024-08-05','2024-08-06'])}activity_df=pd.DataFrame(user_activity)#添加星期几名称activity_df['day_name']=activity_df['activity_date'].dt.day_name()#按星期几汇总用户活动activity_count=activity_df.groupby('day_name')['user_id'].count()print(activity_count)295-6-3、结果输出#295、pandas.Series.dt.day_name方法#295-1、数据分析#day_name#Friday1200#Monday500#Saturday1250#Sunday400#Thursday1000#Tuesday600#Wednesday700#Name:sales,dtype:int64#295-2、可视化#见图3#295-3、报表生成#datesalesday_name#02024-08-01200Thursday#12024-08-02300Friday#22024-08-03250Saturday#32024-08-04400Sunday#42024-08-05500Monday#52024-08-06600Tuesday#62024-08-07700Wednesday#72024-08-08800Thursday#82024-08-09900Friday#92024-08-101000Saturday#295-4、事件调度#eventdateday_name#0EventA2024-08-03Saturday#295-5、数据清洗#datevalueday_nameis_weekend#02024-08-011ThursdayFalse#12024-08-022FridayFalse#22024-08-033SaturdayTrue#32024-08-044SundayTrue#42024-08-055MondayFalse#52024-08-066TuesdayFalse#62024-08-077WednesdayFalse#72024-08-088ThursdayFalse#82024-08-099FridayFalse#92024-08-1010SaturdayTrue#295-6、用户行为分析#day_name#Friday1#Monday1#Saturday1#Sunday1#Thursday1#Tuesday1#Name:user_id,dtype:int64图3: 二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-8 11:43 , Processed in 0.898897 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表