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

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

[复制链接]

8

主题

0

回帖

25

积分

新手上路

积分
25
发表于 2024-9-10 02:57:15 | 显示全部楼层 |阅读模式
目录一、用法精讲301、pandas.Series.dt.components属性301-1、语法301-2、参数301-3、功能301-4、返回值301-5、说明301-6、用法301-6-1、数据准备301-6-2、代码示例301-6-3、结果输出302、pandas.Series.dt.to_pytimedelta方法302-1、语法302-2、参数302-3、功能302-4、返回值302-5、说明302-6、用法302-6-1、数据准备302-6-2、代码示例302-6-3、结果输出303、pandas.Series.dt.total_seconds方法303-1、语法303-2、参数303-3、功能303-4、返回值303-5、说明303-6、用法303-6-1、数据准备303-6-2、代码示例303-6-3、结果输出304、pandas.Series.str.capitalize方法304-1、语法304-2、参数304-3、功能304-4、返回值304-5、说明304-6、用法304-6-1、数据准备304-6-2、代码示例304-6-3、结果输出305、pandas.Series.str.casefold方法305-1、语法305-2、参数305-3、功能305-4、返回值305-5、说明305-6、用法305-6-1、数据准备305-6-2、代码示例305-6-3、结果输出二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页一、用法精讲301、pandas.Series.dt.components属性301-1、语法#301、pandas.Series.dt.components属性pandas.Series.dt.componentsReturnaDataframeofthecomponentsoftheTimedeltas.ReturnsataFrame301-2、参数    无301-3、功能        从一个时间序列对象中提取项的各个部分,如年份、月份、日、小时、分钟、秒、毫秒、微秒、纳秒等。301-4、返回值        返回一个DataFrame,其中每一列代表时间序列的一个组成部分。301-5、说明        使用场景:301-5-1、财务数据分析:在金融数据分析中,通常需要对日期进行分解,以便按年、月、日、季度等进行聚合和分析。例如,按季度计算股票平均价格。301-5-2、运营数据分析:在运营数据分析中,可以根据时间的不同组成部分对数据进行拆分和聚合。例如,按周统计网站访问量。301-5-3、机器学习中的特征工程:在机器学习的特征工程中,时间序列数据的不同组成部分可以作为特征,以提高模型的性能。例如,构建包含时间特征的机器学习数据集。301-5-4、物流和供应链管理:在物流和供应链管理中,可以根据时间的不同组成部分优化运输和库存管理。例如,根据小时分析仓库入库量。301-5-5、电商数据分析:在电商平台的数据分析中,可以根据时间的不同组成部分分析销售趋势和用户行为。例如,按月统计商品销售量。301-6、用法301-6-1、数据准备无301-6-2、代码示例#301、pandas.Series.dt.components属性#301-1、按季度计算股票平均价格importpandasaspd#创建示例数据date_range=pd.date_range(start='2024-01-01',periods=100,freq='D')stock_prices=pd.Series(range(100),index=date_range)df=pd.DataFrame({'date':date_range,'price':stock_prices})#提取日期各部分df['quarter']=df['date'].dt.quarter#按季度计算平均价格quarterly_avg_price=df.groupby('quarter')['price'].mean()print(quarterly_avg_price,end='\n\n')#301-2、按周统计网站访问量importpandasaspd#创建示例数据date_range=pd.date_range(start='2024-01-01',periods=30,freq='D')visit_counts=pd.Series(range(30),index=date_range)df=pd.DataFrame({'date':date_range,'visits':visit_counts})#提取日期各部分df['week']=df['date'].dt.isocalendar().week#按周统计访问量weekly_visits=df.groupby('week')['visits'].sum()print(weekly_visits,end='\n\n')#301-3、构建包含时间特征的机器学习数据集importpandasaspd#创建示例数据date_range=pd.date_range(start='2024-01-01',periods=50,freq='h')values=pd.Series(range(50),index=date_range)df=pd.DataFrame({'datetime':date_range,'value':values})#提取日期时间各部分df['year']=df['datetime'].dt.yeardf['month']=df['datetime'].dt.monthdf['day']=df['datetime'].dt.daydf['hour']=df['datetime'].dt.hourdf['weekday']=df['datetime'].dt.weekdayprint(df.head(),end='\n\n')#301-4、根据小时分析仓库入库量importpandasaspd#创建示例数据date_range=pd.date_range(start='2024-01-01',periods=24,freq='h')inbound_quantities=pd.Series(range(24),index=date_range)df=pd.DataFrame({'datetime':date_range,'quantity':inbound_quantities})#提取时间各部分df['hour']=df['datetime'].dt.hour#按小时统计入库量hourly_inbound=df.groupby('hour')['quantity'].sum()print(hourly_inbound,end='\n\n')#301-5、按月统计商品销售量importpandasaspd#创建示例数据date_range=pd.date_range(start='2024-01-01',periods=100,freq='D')sales_quantities=pd.Series(range(100),index=date_range)df=pd.DataFrame({'date':date_range,'sales':sales_quantities})#提取日期各部分df['month']=df['date'].dt.month#按月统计销售量monthly_sales=df.groupby('month')['sales'].sum()print(monthly_sales,end='\n\n')#301-6、网站每日访问量分析(可视化)importpandasaspdimportnumpyasnpimportmatplotlib.pyplotasplt#生成日期范围date_range=pd.date_range(start='2024-07-01',end='2024-07-31',freq='D')#模拟每日访问量数据np.random.seed(42)visits=np.random.poisson(lam=100,size=len(date_range))#创建数据框df=pd.DataFrame({'date':date_range,'visits':visits})print(df.head())#设置图形大小plt.figure(figsize=(12,6))#绘制时间序列图plt.plot(df['date'],df['visits'],marker='o',linestyle='-',color='b',label='DailyVisits')plt.scatter(df['date'],df['visits'],color='red')#设置数据点为红色#添加和标签plt.title('DailyWebsiteVisitsinJuly2024')plt.xlabel('Date')plt.ylabel('NumberofVisits')plt.xticks(rotation=15)plt.grid(True)#添加平均线average_visits=df['visits'].mean()plt.axhline(y=average_visits,color='r',linestyle='--',label=f'AverageVisits({average_visits:.1f})')#添加图例plt.legend()#显示图形plt.tight_layout()#显示数据标签并设置为红色foriinrange(len(df)):plt.annotate(text=str(df['visits'][i]),xy=(df['date'][i],df['visits'][i]),xytext=(-5,5),textcoords='offsetpoints',ha='center',va='bottom',color='red',fontweight='bold')plt.show()301-6-3、结果输出#301、pandas.Series.dt.components属性#301-1、按季度计算股票平均价格#quarter#145.0#295.0#Name:price,dtype:float64#301-2、按周统计网站访问量#week#121#270#3119#4168#557#Name:visits,dtype:int64#301-3、构建包含时间特征的机器学习数据集#datetimevalueyearmonthdayhourweekday#2024-01-0100:00:002024-01-0100:00:00020241100#2024-01-0101:00:002024-01-0101:00:00120241110#2024-01-0102:00:002024-01-0102:00:00220241120#2024-01-0103:00:002024-01-0103:00:00320241130#2024-01-0104:00:002024-01-0104:00:00420241140#301-4、根据小时分析仓库入库量#hour#00#11#22#33#44#55#66#77#88#99#1010#1111#1212#1313#1414#1515#1616#1717#1818#1919#2020#2121#2222#2323#Name:quantity,dtype:int64#301-5、按月统计商品销售量#month#1465#21305#32325#4855#Name:sales,dtype:int64#301-6、网站每日访问量分析(可视化)#见图1#datevisits#02024-07-0196#12024-07-02107#22024-07-0388#32024-07-04103#42024-07-05111图1:302、pandas.Series.dt.to_pytimedelta方法302-1、语法#302、pandas.Series.dt.to_pytimedelta方法pandas.Series.dt.to_pytimedelta()Returnanarrayofnativedatetime.timedeltaobjects.Python’sstandarddatetimelibraryusesadifferentrepresentationtimedelta’s.ThismethodconvertsaSeriesofpandasTimedeltastodatetime.timedeltaformatwiththesamelengthastheoriginalSeries.Returns:numpy.ndarrayArrayof1Dcontainingdatawithdatetime.timedeltatype.302-2、参数    无302-3、功能        用于将pandas.Series对象中的时间差(Timedelta)数据转换为Python的datetime.timedelta对象。302-4、返回值        返回一个pandas.Series对象,其中的每一个元素都是一个datetime.timedelta对象。302-5、说明        使用场景:302-5-1、与其他库兼容:某些库或函数可能不直接支持pandas的Timedelta类型,但可以接受标准Python的timedelta类型。在这种情况下,可以使用to_pytimedelta()进行转换。302-5-2、标准化处理:在数据分析中,如果你需要将时间差数据传递给其他只接受Python原生数据类型的工具或函数(例如自定义代码、第三方库等),使用to_pytimedelta()可以确保数据格式的一致性。302-5-3、调试和测试:在调试代码时,可能需要将pandas的Timedelta对象转换为Python标准库的timedelta对象,以便更容易地验证和比较结果。302-6、用法302-6-1、数据准备无302-6-2、代码示例#302、pandas.Series.dt.to_pytimedelta方法#302-1、与其他库兼容importpandasaspd#创建一个包含时间差的Seriestimedelta_series=pd.Series(pd.to_timedelta(['1days','2days','3days']))#将Series转换为Python的timedelta对象pytimedelta_series=timedelta_series.dt.to_pytimedelta()#例如,假设你有一个自定义的函数需要标准的timedelta对象defcustom_function(timedeltas):fordeltaintimedeltas:print(f"Processedtimedelta:{delta}")custom_function(pytimedelta_series)print('\n')#302-2、标准化处理importpandasaspdfromdatetimeimporttimedelta#创建一个包含时间差的Seriestimedelta_series=pd.Series(pd.to_timedelta(['10hours','5hours','8hours']))#将Series转换为Python的timedelta对象pytimedelta_series=timedelta_series.dt.to_pytimedelta()#使用标准Python的timedelta对象total_duration=sum(pytimedelta_series,timedelta())print(f"Totalduration:{total_duration}",end='\n\n')#302-3、调试和测试importpandasaspd#创建一个包含时间差的Seriestimedelta_series=pd.Series(pd.to_timedelta(['1days2hours','3days4hours']))#将Series转换为Python的timedelta对象pytimedelta_series=timedelta_series.dt.to_pytimedelta()#假设你要验证转换后的结果fororiginal,convertedinzip(timedelta_series,pytimedelta_series):print(f"Originaltimedelta:{original},Convertedtimedelta:{converted}")302-6-3、结果输出#302、pandas.Series.dt.to_pytimedelta方法#302-1、与其他库兼容#Processedtimedelta:1day,0:00:00#Processedtimedelta:2days,0:00:00#Processedtimedelta:3days,0:00:00#302-2、标准化处理#Totalduration:23:00:00#302-3、调试和测试#Originaltimedelta:1days02:00:00,Convertedtimedelta:1day,2:00:00#Originaltimedelta:3days04:00:00,Convertedtimedelta:3days,4:00:00303、pandas.Series.dt.total_seconds方法303-1、语法#303、pandas.Series.dt.total_seconds方法pandas.Series.dt.total_seconds(*args,**kwargs)Returntotaldurationofeachelementexpressedinseconds.ThismethodisavailabledirectlyonTimedeltaArray,TimedeltaIndexandonSeriescontainingtimedeltavaluesunderthe.dtnamespace.Returns:ndarray,IndexorSeriesWhenthecallingobjectisaTimedeltaArray,thereturntypeisndarray.WhenthecallingobjectisaTimedeltaIndex,thereturntypeisanIndexwithafloat64dtype.WhenthecallingobjectisaSeries,thereturntypeisSeriesoftypefloat64whoseindexisthesameastheoriginal.303-2、参数303-2-1、*args(可选):其他位置参数,为后续扩展功能做预留。303-2-2、**kwargs(可选):其他关键字参数,为后续扩展功能做预留。303-3、功能        用于将Timedelta对象的时间差转换为秒数,该功能特别适用于时间差数据的处理与分析。303-4、返回值        返回一个浮点数,表示时间差的总秒数,对于Series对象,返回一个包含总秒数的Series。303-5、说明    使用场景:303-5-1、计算总秒数:假设你有一个pandas.Series对象,其中包含多个时间差数据,你可以使用该方法将其转换为秒数303-5-2、数据分析:在数据分析中,可能需要将时间差转换为秒数以便进行统计分析,例如,计算平均时间差。303-5-3、转换为其他单位:将时间差数据转换为秒数后,可以方便地进行其他单位的转换,例如,小时或分钟。303-6、用法303-6-1、数据准备无303-6-2、代码示例#303、pandas.Series.dt.total_seconds方法#303-1、计算总秒数importpandasaspd#创建一个包含时间差的Seriestimedelta_series=pd.Series(pd.to_timedelta(['1days2hours','3days4hours']))#计算总秒数seconds_series=timedelta_series.dt.total_seconds()print(seconds_series,end='\n\n')#303-2、数据分析importpandasaspd#创建一个包含时间差的Seriestimedelta_series=pd.Series(pd.to_timedelta(['10minutes','20minutes','30minutes']))#计算总秒数seconds_series=timedelta_series.dt.total_seconds()#计算平均时间差(以秒为单位)average_seconds=seconds_series.mean()print(f"Averagedurationinseconds:{average_seconds}",end='\n\n')#303-3、转换为其他单位importpandasaspd#创建一个包含时间差的Seriestimedelta_series=pd.Series(pd.to_timedelta(['2hours','3.5hours','1hour45minutes']))#计算总秒数seconds_series=timedelta_series.dt.total_seconds()#转换为小时hours_series=seconds_series/3600print(hours_series)303-6-3、结果输出#303、pandas.Series.dt.total_seconds方法#303-1、计算总秒数#093600.0#1273600.0#dtype:float64#303-2、数据分析#Averagedurationinseconds:1200.0#303-3、转换为其他单位#02.00#13.50#21.75#dtype:float64304、pandas.Series.str.capitalize方法304-1、语法#304、pandas.Series.str.capitalize方法pandas.Series.str.capitalize()ConvertstringsintheSeries/Indextobecapitalized.Equivalenttostr.capitalize().Returns:SeriesorIndexofobject.304-2、参数    无304-3、功能        用于将字符串中的每个元素的首字母大写,其余字母小写,这对于标准化文本数据中的字符串格式非常有用。304-4、返回值        返回一个新的Series对象,其中每个字符串的首字母被大写化,其余字母则转为小写。304-5、说明    无304-6、用法304-6-1、数据准备无304-6-2、代码示例#304、pandas.Series.str.capitalize方法#304-1、基本使用importpandasaspd#创建包含字符串的Seriesstring_series=pd.Series(['helloworld','pythonprogramming','datascience'])#首字母大写capitalized_series=string_series.str.capitalize()print(capitalized_series,end='\n\n')#304-2、处理含有多单词的字符串importpandasaspd#创建包含多单词字符串的Seriesstring_series=pd.Series(['machinelearning','deeplearning','naturallanguageprocessing'])#首字母大写capitalized_series=string_series.str.capitalize()print(capitalized_series,end='\n\n')#304-3、处理不同类型的字符串importpandasaspd#创建包含各种字符串的Seriesstring_series=pd.Series(['123abc','FOO','bar123'])#首字母大写capitalized_series=string_series.str.capitalize()print(capitalized_series)304-6-3、结果输出#304、pandas.Series.str.capitalize方法#304-1、基本使用#0Helloworld#1Pythonprogramming#2Datascience#dtypebject#304-2、处理含有多单词的字符串#0Machinelearning#1Deeplearning#2Naturallanguageprocessing#dtypebject#304-3、处理不同类型的字符串#0123abc#1Foo#2Bar123#dtypebject305、pandas.Series.str.casefold方法305-1、语法#305、pandas.Series.str.casefold方法pandas.Series.str.casefold()ConvertstringsintheSeries/Indextobecasefolded.Equivalenttostr.casefold().Returns:SeriesorIndexofobject305-2、参数    无305-3、功能        用于将字符串中的每个元素转换为小写形式,具备更强的Unicode比较能力,它在文本处理时提供了一种比常规小写转换更为强大的方法,尤其是在处理不同语言和区域的字符时。305-4、返回值        返回一个新的Series对象,其中每个字符串元素都被转换为小写,适用于多种语言字符。305-5、说明    无305-6、用法305-6-1、数据准备无305-6-2、代码示例#305、pandas.Series.str.casefold方法#305-1、基本使用importpandasaspd#创建包含字符串的Seriesstring_series=pd.Series(['HelloWorld','PythonProgramming','DataScience'])#使用casefold转换为小写casefolded_series=string_series.str.casefold()print(casefolded_series,end='\n\n')#305-2、处理特殊字符importpandasaspd#创建包含特殊字符的Seriesstring_series=pd.Series(['Sträßchen','ß','Öl','Äpfel'])#使用casefold转换为小写casefolded_series=string_series.str.casefold()print(casefolded_series,end='\n\n')305-6-3、结果输出#305、pandas.Series.str.casefold方法#305-1、基本使用#0helloworld#1pythonprogramming#2datascience#dtypebject#305-2、处理特殊字符#0strässchen#1ss#2öl#3äpfel#dtypebject二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-8 12:05 , Processed in 0.426760 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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