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

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

[复制链接]

8

主题

0

回帖

25

积分

新手上路

积分
25
发表于 2024-9-10 03:03:46 | 显示全部楼层 |阅读模式
目录一、用法精讲311、pandas.Series.str.encode方法311-1、语法311-2、参数311-3、功能311-4、返回值311-5、说明311-6、用法311-6-1、数据准备311-6-2、代码示例311-6-3、结果输出312、pandas.Series.str.endswith方法312-1、语法312-2、参数312-3、功能312-4、返回值312-5、说明312-6、用法312-6-1、数据准备312-6-2、代码示例312-6-3、结果输出313、pandas.Series.str.extract方法313-1、语法313-2、参数313-3、功能313-4、返回值313-5、说明313-6、用法313-6-1、数据准备313-6-2、代码示例313-6-3、结果输出314、pandas.Series.str.extractall方法314-1、语法314-2、参数314-3、功能314-4、返回值314-5、说明314-5-1、基础字符匹配314-5​​​​​​​-2、位置匹配314-5​​​​​​​-3、量词314-5​​​​​​​-4、字符类314-5​​​​​​​-5、分组与捕获314-5​​​​​​​-6、逻辑或314-5​​​​​​​-7、转义字符314-5​​​​​​​-8、贪婪与非贪婪匹配314-6、用法314-6-1、数据准备314-6-2、代码示例314-6-3、结果输出315、pandas.Series.str.find方法315-1、语法315-2、参数315-3、功能315-4、返回值315-5、说明315-6、用法315-6-1、数据准备315-6-2、代码示例315-6-3、结果输出二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页​​​​​​​一、用法精讲311、pandas.Series.str.encode方法311-1、语法#311、pandas.Series.str.encode方法pandas.Series.str.encode(encoding,errors='strict')EncodecharacterstringintheSeries/Indexusingindicatedencoding.Equivalenttostr.encode().Parameters:encodingstrerrorsstr,optionalReturns:Series/Indexofobjects311-2、参数311-2-1、encoding(必须):字符串,指定目标编码类型,如utf-8、ascii、latin-1等等,该参数决定了字符串将被编码为哪种格式。311-2-2、errors(可选,默认值为'strict'):字符串,决定在遇到无法编码的字符时的处理方式,可选值有:'strict':遇到错误时,抛出UnicodeEncodeError异常。'ignore':忽略无法编码的字符。'replace':用?替换无法编码的字符。'backslashreplace':使用反斜杠转义序列替换无法编码的字符。'namereplace':使用\N{...}替换无法编码的字符。311-3、功能        将字符串编码为字节类型(bytes),这对于处理文本数据时尤其有用,比如在处理需要以特定编码存储或传输的文本时。311-4、返回值        返回一个新的Series,其中的每个元素都是原Series中字符串的编码版本,即字节类型(bytes)。311-5、说明    无311-6、用法311-6-1、数据准备无311-6-2、代码示例#311、pandas.Series.str.encode方法importpandasaspds=pd.Series(["hello","world"])s_encoded=s.str.encode('utf-8')print(s_encoded)311-6-3、结果输出#311、pandas.Series.str.encode方法#0b'hello'#1b'world'#dtypebject312、pandas.Series.str.endswith方法312-1、语法#312、pandas.Series.str.endswith方法pandas.Series.str.endswith(pat,na=None)Testiftheendofeachstringelementmatchesapattern.Equivalenttostr.endswith().Parameters:patstrortuple[str,…]Charactersequenceortupleofstrings.Regularexpressionsarenotaccepted.naobject,defaultNaNObjectshownifelementtestedisnotastring.Thedefaultdependsondtypeofthearray.Forobject-dtype,numpy.nanisused.ForStringDtype,pandas.NAisused.Returns:SeriesorIndexofboolASeriesofbooleansindicatingwhetherthegivenpatternmatchestheendofeachstringelement.312-2、参数312-2-1、pat(必须):字符串或元组,表示要检查的模式,可以是一个字符串或者包含多个字符串的元组,如果字符串元素以这个模式或模式中的任何一个结尾,则返回True。312-2-2、na(可选,默认值为None):用于指定在字符串数据缺失(即NaN)的情况下返回的值,默认情况下,NaN返回NaN,但你可以指定为True或False,以返回布尔值。312-3、功能        检查每个字符串元素是否以指定的模式结尾,该方法在需要过滤或分组字符串数据时非常有用,例如查找以特定字符或子字符串结尾的行。312-4、返回值        返回一个布尔类型的Series,其中每个元素的值取决于原Series中的字符串是否以指定的模式结尾,如果是,返回True;否则,返回False。对于缺失值(NaN),返回的值取决于na参数的设置。312-5、说明    使用场景:312-5-1、数据过滤:在处理包含特定后缀的文本数据时,你可以使用该方法进行过滤。例如,如果你有一个包含文件名的Series,并且你只想保留所有以.csv结尾的文件名,那么可以使用此方法。312-5-2、文本分类:在文本数据分类任务中,可以根据文本的后缀来确定类别。例如,在分析电子邮件时,你可以根据邮件的主题行(subject)是否以某个关键词结尾来判断邮件的类型。312-5-3、文件类型识别:当你处理包含不同类型文件路径的数据时,可以使用此方法识别并分类不同类型的文件。例如,在一个包含文件路径的Series 中,识别所有的图片文件。312-5-4、数据清洗:在数据清洗过程中,可能需要删除或处理不符合特定格式的文本数据。使用该方法可以帮助你快速找到并处理这些数据。例如,删除不符合某种标准的条目。312-5-5、检查和处理缺失值:在处理包含缺失值的字符串数据时,可以结合na参数设置来统一处理这些缺失值。例如,在检查字符串数据时,将缺失值统一处理为False。312-6、用法312-6-1、数据准备无312-6-2、代码示例#312、pandas.Series.str.endswith方法#312-1、数据过滤importpandasaspdfile_names=pd.Series(["data.csv","report.pdf","summary.csv","image.png"])csv_files=file_names[file_names.str.endswith(".csv")]print(csv_files,end='\n\n')#312-2、文本分类importpandasaspdsubjects=pd.Series(["Meetingtomorrow","Projectupdate","Meetingschedule","Finalreport"])is_meeting=subjects.str.endswith("Meeting")print(is_meeting,end='\n\n')#312-3、文件类型识别importpandasaspdfile_paths=pd.Series(["/images/photo.jpg","/documents/report.docx","/images/logo.png"])image_files=file_paths[file_paths.str.endswith((".jpg",".png"))]print(image_files,end='\n\n')#312-4、数据清洗importpandasaspddata=pd.Series(["12345","67890X","ABCDE","12345Z"])clean_data=data[~data.str.endswith("X")]print(clean_data,end='\n\n')#312-5、检查和处理缺失值importpandasaspddata=pd.Series(["hello","world",None,"pandas"])result=data.str.endswith("d",na=False)print(result)312-6-3、结果输出#312、pandas.Series.str.endswith方法#312-1、数据过滤#0data.csv#2summary.csv#dtypebject#312-2、文本分类#0False#1False#2False#3False#dtype:bool#312-3、文件类型识别#0/images/photo.jpg#2/images/logo.png#dtypebject#312-4、数据清洗#012345#2ABCDE#312345Z#dtypebject#312-5、检查和处理缺失值#0False#1True#2False#3False#dtype:bool313、pandas.Series.str.extract方法313-1、语法#313、pandas.Series.str.extract方法pandas.Series.str.extract(pat,flags=0,expand=True)ExtractcapturegroupsintheregexpatascolumnsinaDataFrame.ForeachsubjectstringintheSeries,extractgroupsfromthefirstmatchofregularexpressionpat.Parameters:patstrRegularexpressionpatternwithcapturinggroups.flagsint,default0(noflags)Flagsfromtheremodule,e.g.re.IGNORECASE,thatmodifyregularexpressionmatchingforthingslikecase,spaces,etc.Formoredetails,seere.expandbool,defaultTrueIfTrue,returnDataFramewithonecolumnpercapturegroup.IfFalse,returnaSeries/IndexifthereisonecapturegrouporDataFrameiftherearemultiplecapturegroups.ReturnsataFrameorSeriesorIndexADataFramewithonerowforeachsubjectstring,andonecolumnforeachgroup.Anycapturegroupnamesinregularexpressionpatwillbeusedforcolumnnames;otherwisecapturegroupnumberswillbeused.Thedtypeofeachresultcolumnisalwaysobject,evenwhennomatchisfound.Ifexpand=Falseandpathasonlyonecapturegroup,thenreturnaSeries(ifsubjectisaSeries)orIndex(ifsubjectisanIndex).313-2、参数313-2-1、pat(必须):一个正则表达式模式,用于指定要提取的内容,模式中可以包含一个或多个捕获组(用括号()包围的部分),这些捕获组中的内容将被提取。313-2-2、flags(可选,默认值为0):正则表达式的标志,用于控制正则表达式的行为,常用的标志包括:re.IGNORECASE或re.I:忽略大小写匹配re.MULTILINE或re.M:多行匹配模式re.DOTALL或re.S:让点号.匹配包括换行符在内的所有字符313-2-3、expand(可选,默认值为True):布尔值,如果expand=True,方法返回一个DataFrame,其中每个捕获组对应一个列;如果expand=False,且模式包含一个捕获组,则返回一个Series,否则返回一个DataFrame。313-3、功能        用于从每个字符串元素中提取匹配正则表达式模式的内容,该方法对数据清洗和特定格式信息提取非常有用。313-4、返回值    返回DataFrame或Series,取决于expand参数和正则表达式模式中捕获组的数量:如果expand=True,总是返回DataFrame;如果expand=False且模式只有一个捕获组,返回Series;如果有多个捕获组,则返回DataFrame。313-5、说明    使用场景:313-5-1、从字符串中提取结构化信息:数据集中有一列包含“JohnSmith”这样的姓名字符串,你需要将名字和姓氏分别存储在不同的列中。例如,从一列包含姓名的字符串中分别提取名字和姓氏。313-5-2、处理日期时间格式:数据集中有一列日期字符串,如“2024-08-12”,你可能只想提取年份或月份,用于后续分析。例如,从日期字符串中提取年、月、日。313-5-3、提取ID或代码信息:从产品代码字符串中提取特定部分。例如,数据中有一列产品代码“ABC-123-XZ”,你需要从中提取“123”作为产品ID。313-5-4、解析日志或错误信息:你可能在分析服务器日志时,需要提取特定的错误代码来统计不同类型错误的发生频率。例如,从日志字符串中提取错误代码或消息。313-5-5、数据清洗:数据集中包含不规则的地址信息,通过正则表达式提取特定部分,方便后续的标准化处理。例如,从一组地址字符串中提取邮政编码或城市名称。313-5-6、正则表达式模式匹配:数据中有一列包含多种信息混合在一起,如“Order#1234:ItemX-$567”,你需要提取订单号和金额。例如,从混合字符串中提取包含特定模式的信息。313-5-7、分割文本字段:类似于从“Name:John;Age:30;Gender:Male”中提取“John”、“30”、“Male”这些信息。例如,从包含多个字段的字符串中提取每个字段。313-5-8、数据验证与清理:数据集中包含电子邮件地址,你需要验证格式是否正确,并分离用户名和域名部分进行分析。例如,验证电子邮件格式,并提取用户名和域名。313-6、用法313-6-1、数据准备无313-6-2、代码示例#313、pandas.Series.str.extract方法#313-1、从字符串中提取结构化信息importpandasaspd#创建一个包含姓名的DataFramedf=pd.DataFrame({'full_name':['JohnSmith','JaneDoe','AliceJohnson']})#使用str.extract()方法提取名字和姓氏df[['first_name','last_name']]=df['full_name'].str.extract(r'(\w+)\s+(\w+)')print(df,end='\n\n')#313-2、处理日期时间格式importpandasaspd#创建一个包含日期的DataFramedf=pd.DataFrame({'date':['2024-08-12','2023-07-11','2022-06-10']})#提取年、月、日df[['year','month','day']]=df['date'].str.extract(r'(\d{4})-(\d{2})-(\d{2})')print(df,end='\n\n')#313-3、提取ID或代码信息importpandasaspd#创建一个包含产品代码的DataFramedf=pd.DataFrame({'product_code':['ABC-123-XZ','DEF-456-YZ','GHI-789-WX']})#提取产品IDdf['product_id']=df['product_code'].str.extract(r'-(\d+)-')print(df,end='\n\n')#313-4、解析日志或错误信息importpandasaspd#创建一个包含日志信息的DataFramedf=pd.DataFrame({'log':['Error:404NotFound','Error:500InternalServerError','Error:403Forbidden']})#提取错误代码df['error_code']=df['log'].str.extract(r'Error\d{3})')print(df,end='\n\n')#313-5、数据清洗importpandasaspd#创建一个包含地址信息的DataFramedf=pd.DataFrame({'address':['123MainSt,Springfield,IL62704','456ElmSt,Shelbyville,IL61561']})#提取邮政编码df['postal_code']=df['address'].str.extract(r'(\d{5})')print(df,end='\n\n')#313-6、正则表达式模式匹配importpandasaspd#创建一个包含混合信息的DataFramedf=pd.DataFrame({'order_info':['Order#1234:ItemX-$567','Order#5678:ItemY-$890']})#提取订单号和金额df[['order_number','amount']]=df['order_info'].str.extract(r'Order#(\d+):.*-\$(\d+)')print(df,end='\n\n')#313-7、分割文本字段importpandasaspd#创建一个包含多个字段的字符串DataFramedf=pd.DataFrame({'info':['Name:John;Age:30;Gender:Male','Name:Jane;Age:25;Gender:Female']})#提取名字、年龄、性别df[['name','age','gender']]=df['info'].str.extract(r'Name\w+);Age\d+);Gender\w+)')print(df,end='\n\n')#313-8、数据验证与清理importpandasaspd#创建一个包含电子邮件的DataFramedf=pd.DataFrame({'email':['john.smith@example.com','jane.doe@domain.org']})#提取用户名和域名df[['username','domain']]=df['email'].str.extract(r'([^@]+)@(.+)')print(df)313-6-3、结果输出#313、pandas.Series.str.extract方法#313-1、从字符串中提取结构化信息#full_namefirst_namelast_name#0JohnSmithJohnSmith#1JaneDoeJaneDoe#2AliceJohnsonAliceJohnson#313-2、处理日期时间格式#dateyearmonthday#02024-08-1220240812#12023-07-1120230711#22022-06-1020220610#313-3、提取ID或代码信息#product_codeproduct_id#0ABC-123-XZ123#1DEF-456-YZ456#2GHI-789-WX789#313-4、解析日志或错误信息#logerror_code#0Error:404NotFound404#1Error:500InternalServerError500#2Error:403Forbidden403#313-5、数据清洗#addresspostal_code#0123MainSt,Springfield,IL6270462704#1456ElmSt,Shelbyville,IL6156161561#313-6、正则表达式模式匹配#order_infoorder_numberamount#0Order#1234:ItemX-$5671234567#1Order#5678:ItemY-$8905678890#313-7、分割文本字段#infonameagegender#0Name:John;Age:30;Gender:MaleJohn30Male#1Name:Jane;Age:25;Gender:FemaleJane25Female#313-8、数据验证与清理#emailusernamedomain#0john.smith@example.comjohn.smithexample.com#1jane.doe@domain.orgjane.doedomain.org314、pandas.Series.str.extractall方法314-1、语法#314、pandas.Series.str.extractall方法pandas.Series.str.extractall(pat,flags=0)ExtractcapturegroupsintheregexpatascolumnsinDataFrame.ForeachsubjectstringintheSeries,extractgroupsfromallmatchesofregularexpressionpat.WheneachsubjectstringintheSerieshasexactlyonematch,extractall(pat).xs(0,level=’match’)isthesameasextract(pat).Parameters:patstrRegularexpressionpatternwithcapturinggroups.flagsint,default0(noflags)Aremoduleflag,forexamplere.IGNORECASE.Theseallowtomodifyregularexpressionmatchingforthingslikecase,spaces,etc.MultipleflagscanbecombinedwiththebitwiseORoperator,forexamplere.IGNORECASE|re.MULTILINE.ReturnsataFrameADataFramewithonerowforeachmatch,andonecolumnforeachgroup.ItsrowshaveaMultiIndexwithfirstlevelsthatcomefromthesubjectSeries.Thelastlevelisnamed‘match’andindexesthematchesineachitemoftheSeries.Anycapturegroupnamesinregularexpressionpatwillbeusedforcolumnnames;otherwisecapturegroupnumberswillbeused.314-2、参数314-2-1、pat(必须):字符串,一个包含正则表达式模式的字符串,该模式用于定义要匹配的文本片段,正则表达式中使用的捕获组(圆括号())用于提取匹配的子字符串,该方法会返回所有匹配的捕获组。314-2-2、flags(可选,默认值为0):正则表达式的标志,用于控制正则表达式的行为,常用的标志包括:re.IGNORECASE或re.I:忽略大小写匹配re.MULTILINE或re.M:多行匹配模式re.DOTALL或re.S:让点号.匹配包括换行符在内的所有字符314-3、功能        用于在一个Series或DataFrame对象的每个字符串元素中,根据给定的正则表达式pat提取所有匹配的子字符串。与str.extract()方法不同,extractall()提取的是所有匹配项,而不仅仅是第一个匹配项。314-4、返回值        返回值是一个DataFrame,它包含了从字符串中提取的所有匹配项,这个DataFrame的特点如下:行索引(MultiIndex):第一个级别是原始数据的索引,这个索引指示了每一行对应于原始数据的哪一个元素。第二个级别是一个整数索引,表示每个原始字符串中匹配到的第几个子串(从0开始计数)。列:如果正则表达式中有捕获组(即括号()),则返回的DataFrame的每一列对应一个捕获组。如果正则表达式中没有命名捕获组,列的名称将是整数(0、1、2……),依次对应捕获组的顺序。如果使用了命名捕获组,那么返回的DataFrame中的列将以这些名称命名。314-5、说明        常见正则表达式规则清单:314-5-1、基础字符匹配.:匹配任意单个字符(除了换行符)。\w:匹配任意字母、数字或下划线(相当于[a-zA-Z0-9_])。\W:匹配任意非字母、数字或下划线字符(相当于[^a-zA-Z0-9_])。\d:匹配任意数字(相当于[0-9])。\D:匹配任意非数字字符(相当于[^0-9])。\s:匹配任意空白字符(空格、制表符等)。\S:匹配任意非空白字符。314-5​​​​​​​-2、位置匹配^:匹配字符串的开头。$:匹配字符串的结尾。\b:匹配单词边界(词的开头或结尾)。\B:匹配非单词边界。314-5​​​​​​​-3、量词*:匹配前一个字符0次或多次。+:匹配前一个字符1次或多次。?:匹配前一个字符0次或1次(可选匹配)。{n}:精确匹配前一个字符n次。{n,}:匹配前一个字符至少n次。{n,m}:匹配前一个字符至少n次且至多m次。314-5​​​​​​​-4、字符类[abc]:匹配a、b或c中的任意一个字符。[^abc]:匹配除a、b、c 之外的任意字符。[a-z]:匹配从a到z范围内的任意字符。314-5​​​​​​​-5、分组与捕获(abc):将abc作为一个捕获组,匹配字符串'abc'。(?:abc):非捕获组,匹配'abc'但不进行捕获。(?Pabc):命名捕获组,将匹配的'abc'捕获到name组中。314-5​​​​​​​-6、逻辑或a|b:匹配a或b。314-5​​​​​​​-7、转义字符\:用于转义特殊字符。例如,\.匹配一个点,而不是任意字符。314-5​​​​​​​-8、贪婪与非贪婪匹配默认情况下,*, +, ?和{} 是贪婪的,即尽可能多地匹配。在量词后加上?(如 *?, +?, {n,m}?)使其变为非贪婪模式,只匹配尽可能少的字符。314-6、用法314-6-1、数据准备无314-6-2、代码示例#314、pandas.Series.str.extractall方法importpandasaspd#创建一个包含订单信息的Seriess=pd.Series(['Order#1234567','Order#5678890'])#使用extractall提取订单号和金额result=s.str.extractall(r'Order#(\d+):\$(\d+)')print(result)314-6-3、结果输出#314、pandas.Series.str.extractall方法#01#match#001234567#105678890315、pandas.Series.str.find方法315-1、语法#315、pandas.Series.str.find方法pandas.Series.str.find(sub,start=0,end=None)ReturnlowestindexesineachstringsintheSeries/Index.Eachofreturnedindexescorrespondstothepositionwherethesubstringisfullycontainedbetween[start:end].Return-1onfailure.Equivalenttostandardstr.find().Parameters:substrSubstringbeingsearched.startintLeftedgeindex.endintRightedgeindex.Returns:SeriesorIndexofint.315-2、参数315-2-1、sub(必须):字符串,表示要查找的子字符串,该方法会在Series的每个字符串元素中寻找这个子字符串。315-2-2、start(可选,默认值为0):整数,表示查找的起始位置(以字符索引为基准)。默认为0,即从字符串的开头开始查找。315-2-3、end(可选,默认值为None):整数,表示查找的结束位置(以字符索引为基准)。默认为None,即查找到字符串的结尾。如果指定了end,则查找会在该索引前停止。315-3、功能        查找子字符串sub在Series的每个字符串元素中的第一次出现的位置。如果找到了子字符串,则返回其在字符串中的第一个字符的索引;如果未找到,则返回-1。315-4、返回值        返回一个整数类型的Series,其中每个元素表示子字符串sub在对应原始字符串中的起始索引,如果某个字符串中未找到子字符串,则对应位置返回-1。315-5、说明    无315-6、用法315-6-1、数据准备无315-6-2、代码示例#315、pandas.Series.str.find方法importpandasaspd#创建一个Seriess=pd.Series(["apple","banana","cherry","date"])#查找'a'在每个字符串中的位置result=s.str.find('a')print(result)315-6-3、结果输出#315、pandas.Series.str.find方法#00#11#2-1#31#dtype:int64二、推荐阅读1、Python筑基之旅2、Python函数之旅3、Python算法之旅4、Python魔法之旅5、博客个人主页
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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