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

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

[复制链接]

5

主题

0

回帖

16

积分

新手上路

积分
16
发表于 2024-9-10 03:32:10 | 显示全部楼层 |阅读模式
目录一、用法精讲376、pandas.Series.list.flatten方法376-1、语法376-2、参数376-3、功能376-4、返回值376-5、说明376-6、用法376-6-1、数据准备376-6-2、代码示例376-6-3、结果输出377、pandas.Series.list.__getitem__魔法方法377-1、语法377-2、参数377-3、功能377-4、返回值 377-5、说明377-6、用法377-6-1、数据准备377-6-2、代码示例377-6-3、结果输出378、pandas.Series.struct.field方法378-1、语法378-2、参数378-3、功能378-4、返回值378-5、说明378-6、用法378-6-1、数据准备378-6-2、代码示例378-6-3、结果输出379、pandas.Series.struct.explode方法379-1、语法379-2、参数379-3、功能379-4、返回值379-5、说明379-6、用法379-6-1、数据准备379-6-2、代码示例379-6-3、结果输出380、pandas.Flags类380-1、语法380-2、参数380-3、功能380-4、返回值380-5、说明380-6、用法380-6-1、数据准备380-6-2、代码示例380-6-3、结果输出二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页一、用法精讲376、pandas.Series.list.flatten方法376-1、语法#376、pandas.Series.list.flatten方法pandas.Series.list.flatten()Flattenlistvalues.Returns:pandas.SeriesThedatafromalllistsintheseriesflattened.376-2、参数    无376-3、功能        将嵌套的列表或数组结构扁平化,即将多层嵌套的列表转换为一维列表,这对于处理复杂的数据结构非常有用,特别是在数据分析和清洗过程中,可以更直观地分析数据。376-4、返回值        返回一个新的列表,它是原始嵌套列表的扁平化版本,返回的列表包含原始列表中所有的元素,但不再具有任何嵌套结构。376-5、说明    使用场景:376-5-1、数据清理:在数据集中,有时我们可能需要清理包含嵌套列表的列,通过扁平化这些列表,可以更容易地分析和处理数据。例如,处理用户的购物车内容,将每个购物车中的商品合并到一个单一列表中,以便于后续分析。376-5-2、数据汇总:当你需要对嵌套列表中的数据进行汇总时,扁平化可以大大简化这一过程。例如,可以从多个用户的反馈中提取出所有的关键字,并将它们汇总到一个列表中,以便后续进行频率分析或情感分析。376-5-3、特征工程:在机器学习和深度学习中,特征工程是数据预处理的重要步骤,如果你的数据集中包含了列表形式的特征(例如,一个用户的观看记录),可以使用flatten()方法将这些嵌套特征扁平化,从而将其转化为模型可以接受的一维格式。376-5-4、数据可视化准备:在准备可视化数据时,尤其是绘制图表或进行统计分析时,扁平化的数据结构更易于使用。例如,在制作条形图或者饼图时,确保数据是一维的可以减少处理的复杂性。376-5-5、处理JSON或API数据:在使用API获取数据时,返回的结果往往包含嵌套结构(例如,嵌套的JSON对象),使用该方法可以帮助快速处理并提取出需要的信息,使得进一步的数据分析或存储工作更加高效。376-5-6、数据整合与合并:当从多个来源收集数据时,有些数据可能会以不同的嵌套方式存储,通过扁平化这些列表,可以得到一致的数据格式,从而便于后续合并或整合。376-6、用法376-6-1、数据准备无376-6-2、代码示例#376、pandas.Series.list.flatten方法#376-1、数据清理importpandasaspd#构造数据data={'user_id':[1,2,3],'shopping_cart':[['item1','item2'],['item3'],['item4','item5','item6']]}df=pd.DataFrame(data)#扁平化购物车flattened_cart=df.explode('shopping_cart')print(flattened_cart,end='\n\n')#376-2、数据汇总importpandasaspd#构造数据data={'user_id':[1,2,3],'feedback':[['great','satisfaction'],['okay'],['great','good','excellent']]}df=pd.DataFrame(data)#扁平化反馈flattened_feedback=df.explode('feedback')#汇总关键词keyword_counts=flattened_feedback['feedback'].value_counts()print(keyword_counts,end='\n\n')#376-3、特征工程importpandasaspd#构造数据data={'user_id':[1,2,3],'watch_history':[['MovieA','MovieB'],['MovieC'],['MovieA','MovieD']]}df=pd.DataFrame(data)#扁平化观看历史flattened_watch_history=df.explode('watch_history')#准备特征(这里简单以独热编码的形式展示)features=pd.get_dummies(flattened_watch_history['watch_history'])print(features,end='\n\n')#376-4、数据可视化准备importpandasaspdimportmatplotlib.pyplotasplt#构造数据data={'user_id':[1,2,3],'watch_history':[['MovieA','MovieB'],['MovieC'],['MovieA','MovieD','MovieE']]}df=pd.DataFrame(data)#扁平化观看历史flattened_watch_history=df.explode('watch_history')#统计每部电影的观看次数watch_counts=flattened_watch_history['watch_history'].value_counts()#可视化watch_counts.plot(kind='bar',color='purple')plt.title('MovieWatchCounts')plt.xlabel('Movies')plt.xticks(rotation=25,ha='right',color='#FF4444',fontweight='bold')plt.ylabel('Counts')plt.show()#376-5、处理JSON或API数据importpandasaspd#模拟从API获取的数据,包含嵌套结构data=[{'user_id':1,'purchases':['item1','item2']},{'user_id':2,'purchases':['item3']},{'user_id':3,'purchases':['item4','item5','item6']}]#转换为DataFramedf=pd.DataFrame(data)#扁平化购买记录flattened_purchases=df.explode('purchases')print(flattened_purchases,end='\n\n')#376-6、数据整合与合并importpandasaspd#源1的数据data1={'user_id':[1,2],'items':[['item1','item2'],['item3']]}#源2的数据data2={'user_id':[2,3],'items':[['item4'],['item5','item6']]}df1=pd.DataFrame(data1)df2=pd.DataFrame(data2)#扁平化df1_flat=df1.explode('items')df2_flat=df2.explode('items')#合并数据merged_df=pd.concat([df1_flat,df2_flat],ignore_index=True)print(merged_df)376-6-3、结果输出#376、pandas.Series.list.flatten方法#376-1、数据清理#user_idshopping_cart#01item1#01item2#12item3#23item4#23item5#23item6#376-2、数据汇总#feedback#great2#satisfaction1#okay1#good1#excellent1#Name:count,dtype:int64#376-3、特征工程#MovieAMovieBMovieCMovieD#0TrueFalseFalseFalse#0FalseTrueFalseFalse#1FalseFalseTrueFalse#2TrueFalseFalseFalse#2FalseFalseFalseTrue#376-4、数据可视化准备#见图1#376-5、处理JSON或API数据#user_idpurchases#01item1#01item2#12item3#23item4#23item5#23item6#376-6、数据整合与合并#user_iditems#01item1#11item2#22item3#32item4#43item5#53item6图1: 377、pandas.Series.list.__getitem__魔法方法377-1、语法#377、pandas.Series.list.__getitem__魔法方法pandas.Series.list.__getitem__(key)IndexorslicelistsintheSeries.Parameters:keyint|sliceIndexorsliceofindicestoaccessfromeachlist.Returns:pandas.SeriesThelistatrequestedindex.377-2、参数377-2-1、key(必须):具体来说,key可以是以下几种类型:377-2-1-1、单个整数:如果你提供一个单整数key(如0,1等),它将返回Series中该位置上的元素,这是通过位置索引来获取的。377-2-1-2、切片对象:如果提供一个切片对象(如slice(0,3),它将返回对应范围内的元素组成的列表。377-2-1-3、布尔数组:如果提供一个布尔数组(如[True,False,True]),它将返回所有对应为True的位置上的元素。377-2-1-4、列表或数组:如果提供一个包含多个索引的列表或数组(如[1,3]),它将返回对应位置的元素组成的新列表。377-3、功能        在于根据输入的key访问Series中的元素,它允许用户灵活地访问单个元素或多个元素,并返回相应的结果。377-4、返回值 如果key是单个整数,返回该位置上的元素(通常是一个值或列表)。如果key是切片,返回一个新列表,包含在切片范围内的所有元素。如果key是布尔数组,则返回对应为True的元素组成的新列表。如果key是一个列表或数组,则返回对应位置的元素组成的新列表。377-5、说明    使用场景:377-5-1、数据提取:当你需要从时间序列、分类数据或其他类型的序列中提取特定值时,该方法非常有用,你可以使用索引提取初始化数据,方便后续分析。377-5-2、数据过滤:利用布尔索引提取符合特定条件的元素。例如,你可以根据某些逻辑条件来选择数据,这在数据清洗和预处理时非常常见。377-5-3、批量操作:通过传递列表或数组作为索引,可以一次性提取多个元素。例如,当你只想分析某些特定日期的数据时,可以通过列表索引快速提取这些数据。377-5-4、切片操作:通过切片对象提取一段连续的数据。这适用于需要处理一段时间序列(如金融数据)或一组相关指标的情况,例如计算某个时间段的平均值或总和。377-5-5、动态索引访问:在数据分析过程中,可能会基于用户交互、算法输出或其他动态条件调整需要访问的元素,该方法可以灵活实现这种动态访问。377-5-6、数据转换:在处理复杂数据时,可以借助该方法提取并转换数据格式。例如,将数据从列表转换为数组格式或提取特定列的数据进行后续处理。377-6、用法377-6-1、数据准备无377-6-2、代码示例#377、pandas.Series.list.__getitem__魔法方法#377-1、数据提取importpandasaspd#创建一个数据序列s=pd.Series([10,20,30,40])#提取索引为2的值value=s[2]print(f"提取的值:{value}",end='\n\n')#377-2、数据过滤importpandasaspd#创建一个数据序列s=pd.Series([1,2,3,4,5])#提取大于3的元素filtered=s[s>3]print(f"过滤后的数据:{filtered.tolist()}",end='\n\n')#377-3、批量操作importpandasaspd#创建一个数据序列s=pd.Series(['a','b','c','d'])#提取索引为0和2的元素subset=s[[0,2]]print(f"提取的子集:{subset.tolist()}",end='\n\n')#377-4、切片操作importpandasaspd#创建一个数据序列s=pd.Series([1,2,3,4,5])#切片操作slice_result=s[1:4]print(f"切片结果:{slice_result.tolist()}",end='\n\n')#377-5、动态索引访问importpandasaspd#创建一个数据序列s=pd.Series(['apple','banana','cherry','date'])#假设我们有一个动态索引列表dynamic_indices=[1,3]#根据动态索引提取数据dynamic_result=s[dynamic_indices]print(f"动态提取的结果:{dynamic_result.tolist()}",end='\n\n')#377-6、数据转换importpandasaspd#创建一个数据序列s=pd.Series([10,20,30,40])#提取数据并转换为NumPy数组array_result=s.to_numpy()print(f"转换为数组:{array_result}")377-6-3、结果输出#377、pandas.Series.list.__getitem__魔法方法#377-1、数据提取#提取的值:30#377-2、数据过滤#过滤后的数据:[4,5]#377-3、批量操作#提取的子集:['a','c']#377-4、切片操作#切片结果:[2,3,4]#377-5、动态索引访问#动态提取的结果:['banana','date']#377-6、数据转换#转换为数组:[10203040]378、pandas.Series.struct.field方法378-1、语法#378、pandas.Series.struct.field方法pandas.Series.struct.field(name_or_index)ExtractachildfieldofastructasaSeries.Parameters:name_or_indexstr|bytes|int|expression|listNameorindexofthechildfieldtoextract.Forlist-likeinputs,thiswillindexintoanestedstruct.Returns:pandas.SeriesThedatacorrespondingtotheselectedchildfield.378-2、参数378-2-1、name_or_index(必须):该参数可以是字符串或整数,具体取决于你想要访问的字段的名称或索引,如果是字符串,表示你想获取的字段的名称;如果是整数,表示字段的位置索引(从0开始)。378-3、功能        用于访问Series中每个元素的特定字段,方便对结构化数据进行处理和分析,它通常与包含多个字段的复杂数据结构结合使用,比如从Series中提取某个字段的信息。378-4、返回值        返回一个Series对象,其中包含从原始Series中选定字段提取的值,如果字段不存在,通常会引发错误,提示无法找到指定的字段。378-5、说明    无378-6、用法378-6-1、数据准备无378-6-2、代码示例#378、pandas.Series.struct.field方法importpyarrowaspaimportpandasaspdimportpyarrow.computeaspcs=pd.Series([{"version":1,"project":"pandas"},{"version":2,"project":"pandas"},{"version":1,"project":"numpy"},],dtype=pd.ArrowDtype(pa.struct([("version",pa.int64()),("project",pa.string())])))data_by_name=s.struct.field("project")print(data_by_name)data_by_index=s.struct.field(0)print(data_by_index)data=s.struct.field(pc.field("project"))print(data)378-6-3、结果输出#378、pandas.Series.struct.field方法#0pandas#1pandas#2numpy#Name:project,dtype:string[pyarrow]#01#12#21#Name:version,dtype:int64[pyarrow]#0pandas#1pandas#2numpy#Name:project,dtype:string[pyarrow]379、pandas.Series.struct.explode方法379-1、语法#379、pandas.Series.struct.explode方法pandas.Series.struct.explode()ExtractallchildfieldsofastructasaDataFrame.Returns:pandas.DataFrameThedatacorrespondingtoallchildfields.379-2、参数    无379-3、功能        返回一个新的DataFrame或Series,其中列表或数组的每个元素都在单独的一行中。379-4、返回值        对于DataFrame,返回一个新的DataFrame,其中原来包含列表的列被“展开”为多行;对于Series,返回一个新的Series,播放同样的效果。379-5、说明    无379-6、用法379-6-1、数据准备无379-6-2、代码示例#379、pandas.Series.struct.explode方法importpandasaspddata={'id':[1,2,3],'fruits':[['apple','banana'],['orange'],['grape','kiwi']]}df=pd.DataFrame(data)exploded_df=df.explode('fruits')print(exploded_df)379-6-3、结果输出#379、pandas.Series.struct.explode方法#idfruits#01apple#01banana#12orange#23grape#23kiwi380、pandas.Flags类380-1、语法#380、pandas.Flags类classpandas.Flags(obj,*,allows_duplicate_labels)Flagsthatapplytopandasobjects.ParametersbjSeriesorDataFrameTheobjecttheseflagsareassociatedwith.allows_duplicate_labelsbool,defaultTrueWhethertoallowduplicatelabelsinthisobject.Bydefault,duplicatelabelsarepermitted.SettingthistoFalsewillcauseanerrors.DuplicateLabelErrortoberaisedwhenindex(orcolumnsforDataFrame)isnotunique,oranysubsequentoperationonintroducesduplicates.SeeDisallowingDuplicateLabelsformore.WarningThisisanexperimentalfeature.Currently,manymethodsfailtopropagatetheallows_duplicate_labelsvalue.InfutureversionsitisexpectedthateverymethodtakingorreturningoneormoreDataFrameorSeriesobjectswillpropagateallows_duplicate_labels.380-2、参数380-2-1、obj(必须):需要设置Flags的对象,它指明了要应用Flags的目标对象。380-2-2、allows_duplicate_labels(可选,默认值为False):表示是否允许在对象中存在重复的标签,默认值为False,表示不允许重复标签;如果设置为True,则对象可以有重复的标签。380-3、功能        用于定义DataFrame或Series中的标签的属性,该类可以帮助用户指定对某些操作的行为,比如是否允许重复标签。380-4、返回值        返回一个Flags对象,表示所提供对象的标签属性,这可以用于后续的数据操作以确保所应用标志的有效性和一致性。380-5、说明380-5-1、使用Flags设置的属性通常会影响到后续的操作,所以在创建DataFrame或Series之后,理解这些标志的作用是非常重要的。380-5-2、标签的重复与否可以影响到数据分析和处理的结果,因此在创建或操作对象时需谨慎考虑这些设置。380-6、用法380-6-1、数据准备无380-6-2、代码示例#380、pandas.Flags类importpandasaspd#创建一个DataFramedf=pd.DataFrame({'A':[1,2,3],'B':[4,5,6]})#设置Flags,允许重复标签flags=pd.Flags(df,allows_duplicate_labels=True)#检查Flags属性print(flags.allows_duplicate_labels)380-6-3、结果输出#380、pandas.Flags类#True二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-8 12:03 , Processed in 0.456887 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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