pandas中对文本类型数据的处理小结
下面看下pandas中字符串类处理函数吧,内容如下所示:
1.英文字母大小写转换及填充
s = pd.Series(['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe'])
- 大写转小写: s.str.lower()
- 小写转大写:s.str.upper()
- 转为新闻标题形式:s.str.title()
- 首字母大写,其余小写:s.str.capitalize()
- 将原来的大写和小写,分别转为小写和大写,即大小写互换:s.str.swapcase()
- 将文字内容用某种字符填充到固定长度,会从两边进行填充:s.str.center(4,'*')
- 将文字内容用某种字符填充到固定长度,可以设置填充方向(默认为left,可以设置为left,right,both):s.str.pad(width=10, side=‘right', fillchar='-')
- 将文字内容用某种字符填充到固定长度,会从文字的右方进行填充,即原来的字符串在左边:s.str.ljust(4,'-')
- 将文字内容用某种字符填充到固定长度,会从文字的左方进行填充,即原来的字符串在右边:s.str.rjust(4,'-')
- 将文字内容用某种字符按照指定的方向(left,right,both)填充到固定长度: s.str.pad(3,side=‘left',fillchar='*')
- 在字符串前添加0到指定长度:
- s = pd.Series(['-1', ‘1', ‘1000', 10, np.nan])
- s.str.zfill(3)
2.字符串合并与拆分
2.1 多列字符串合并
注意:多列字符串在合并时,推荐使用cat函数,该函数是按照索引进行合并的。
s=pd.DataFrame({'col1':['a', 'b', np.nan, 'd'],'col2':['A', 'B', 'C', 'D']}) # 1.有一个缺失值的行不进行合并 s['col1'].str.cat([s['col2']]) # 2.用固定字符(*)替换缺失值,并进行合并 s['col1'].str.cat([s['col2']],na_rep='*') # 3.用固定字符(*)替换缺失值,并用分隔符(,)进行合并 s['col1'].str.cat([s['col2']],na_rep='*',sep=',') # 4.索引不一致的合并 #创建series s = pd.Series(['a', 'b', np.nan, 'd']) t = pd.Series(['d', 'a', 'e', 'c'], index=[3, 0, 4, 2]) #合并 s.str.cat(t, join='left', na_rep='-') s.str.cat(t, join='right', na_rep='-') s.str.cat(t, join='outer', na_rep='-') s.str.cat(t, join='inner', na_rep='-')
2.2 一列 列表形式的文本合并为一列
s = pd.Series([['lion', 'elephant', 'zebra'], [1.1, 2.2, 3.3], [ 'cat', np.nan, 'dog'], ['cow', 4.5, 'goat'], ['duck', ['swan', 'fish'], 'guppy']]) #以下划线进行拼接 s.str.join('_')
使用前:
使用后:
2.3 一列字符串与自身合并成为一列
s = pd.Series(['a', 'b', 'c']) #指定数字 s.str.repeat(repeats=2) #指定列表 s.str.repeat(repeats=[1, 2, 3])
使用该函数后,效果图分别如下:
2.4 一列字符串拆分为多列
2.4.1 partition函数
partition函数,会将某列字符串拆分为3列,其中2列为值,1列为分隔符。
有两个参数进行设置,分别为:sep(分隔符,默认为空格),expand(是否生成dataframe,默认为True)
s = pd.Series(['Linda van der Berg', 'George Pitt-Rivers']) #默认写法,以空格分割,会以第一个分隔符进行拆分 s.str.partition() #另一写法,会以最后一个分隔符进行拆分 s.str.rpartition() #以固定符号作为分隔符 s.str.partition('-', expand=False) #拆分索引 idx = pd.Index(['X 123', 'Y 999']) idx.str.partition()
2.4.2 split函数
split函数会按照分隔符拆分为多个值。
参数:
pat(分隔符,默认为空格);
n(限制分隔的输出,即查找几个分隔符,默认-1,表示全部);
expend(是否生成dataframe,默认为False)。
s = pd.Series(["this is a regular sentence","https://docs.python.org/3/tutorial/index.html",np.nan]) #1.默认按照空格进行拆分 s.str.split() #2.按照空格进行拆分,并限制2个分隔符的输出 s.str.split(n=2) #3.以指定符号拆分,并生成新的dataframe s.str.split(pat = "/",expend=True) #4.使用正则表达式来进行拆分,并生成新的dataframe s = pd.Series(["1+1=2"]) s.str.split(r"\+|=", expand=True)
2.4.3 rsplit函数
如果不设置n的值,rsplit和split效果是相同的。区别是,split是从开始进行限制,rsplit是从末尾进行限制。
s = pd.Series(["this is a regular sentence","https://docs.python.org/3/tutorial/index.html",np.nan]) #区别于split s.str.rsplit(n=2)
3.字符串统计
3.1 统计某列字符串中包含某个字符串的个数
s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')]) s.str.len()
3.2 统计字符串长度
s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')]) s.str.len()
效果图如下:
4.字符串内容查找(包含正则)
4.1 extract
可通过正则表达式来提取指定内容,小括号内的会生成一列
s = pd.Series(['a1', 'b2', 'c3']) #按照小括号内的进行提取,生成两列 s.str.extract(r'([ab])(\d)') #加上问号后,如果有一个匹配不上,还可以继续匹配 s.str.extract(r'([ab])?(\d)') #可以对生成的新列进行重命名 s.str.extract(r'(?P<letter>[ab])(?P<digit>\d)') #生成1列 s.str.extract(r'[ab](\d)', expand=True)
4.2 extractall
区别于extract,该函数可以提取所有符合条件的元素
s = pd.Series(["a1a2", "b1", "c1"], index=["A", "B", "C"]) #提取所有符合条件的数字,结果为多重索引1列 s.str.extractall(r"[ab](\d)") #提取符合条件的数字,并重命名,结果为多重索引1列 s.str.extractall(r"[ab](?P<digit>\d)") #提取符合条件的a、b和数字,结果为多重索引多列 s.str.extractall(r"(?P<letter>[ab])(?P<digit>\d)") #提取符合条件的a、b和数字,添加问号后,一个匹配不上可以继续向后匹配,结果为多重索引多列 s.str.extractall(r"(?P<letter>[ab])?(?P<digit>\d)")
4.3 find
查询固定字符串在目标字符串中的最小索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1
s = pd.Series(['appoint', 'price', 'sleep','amount']) s.str.find('p')
显示结果如下:
4.4 rfind
查询固定字符串在目标字符串中的最大索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1。
s = pd.Series(['appoint', 'price', 'sleep','amount']) s.str.rfind('p',start=1)
查询结果如下:
4.5 findall
查找系列/索引中所有出现的模式或正则表达式
s = pd.Series(['appoint', 'price', 'sleep','amount']) s.str.findall(r'[ac]')
显示结果如下:
4.6 get
从列表、元组或字符串中的每个元素中提取元素的系列/索引。
s = pd.Series(["String", (1, 2, 3), ["a", "b", "c"], 123, -456, {1: "Hello", "2": "World"}]) s.str.get(1)
效果如下图:
4.7 match
确定每个字符串是否与参数中的正则表达式匹配。
s = pd.Series(['appoint', 'price', 'sleep','amount']) s.str.match('^[ap].*t')
匹配效果图如下:
5.字符串逻辑判断
5.1 contains函数
测试模式或正则表达式是否包含在系列或索引的字符串中。
参数:
pat,字符串或正则表达式;
case,是否区分大小写,默认为True,即区分大小写;
flags,是否传递到re模块,默认为0;
na,对缺失值的处理方法,默认为nan;
regex,是否将pat参数当作正则表达式来处理,默认为True。
s = pd.Series(['APpoint', 'Price', 'cap','approve',123]) s.str.contains('ap',case=True,na=False,regex=False)
效果图如下:
5.2 endswith函数
测试每个字符串元素的结尾是否与字符串匹配。
s = pd.Series(['APpoint', 'Price', 'cap','approve',123]) s.str.endswith('e')
匹配结果如下:
处理nan值
s = pd.Series(['APpoint', 'Price', 'cap','approve',123]) s.str.endswith('e',na=False)
效果如下:
5.3 startswith函数
测试每个字符串元素的开头是否与字符串匹配。
s = pd.Series(['APpoint', 'Price', 'cap','approve',123]) s.str.startswith('a',na=False)
匹配如下:
5.4 isalnum函数
检查每个字符串中的所有字符是否都是字母数字。
s1 = pd.Series(['one', 'one1', '1', '']) s1.str.isalnum()
效果如下:
5.5 isalpha函数
检查每个字符串中的所有字符是否都是字母。
s1 = pd.Series(['one', 'one1', '1', '']) s1.str.isalpha()
效果如下:
5.6 isdecimal函数
检查每个字符串中的所有字符是否都是十进制的。
s1 = pd.Series(['one', 'one1', '1','']) s1.str.isdecimal()
效果如下:
5.7 isdigit函数
检查每个字符串中的所有字符是否都是数字。
s1 = pd.Series(['one', 'one1', '1','']) s1.str.isdigit()
效果如下:
5.8 islower函数
检查每个字符串中的所有字符是否都是小写。
s1 = pd.Series(['one', 'one1', '1','']) s1.str.islower()
效果如下:
5.9 isnumeric函数
检查每个字符串中的所有字符是否都是数字。
s1 = pd.Series(['one', 'one1', '1','','3.6']) s1.str.isnumeric()
效果如下:
5.10 isspace函数
检查每个字符串中的所有字符是否都是空格。
s1 = pd.Series([' one', '\t\r\n','1', '',' ']) s1.str.isspace()
效果如下:
5.11 istitle函数
检查每个字符串中的所有字符是否都是标题形式的大小写。
s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', '']) s1.str.istitle()
效果如下:
5.12 isupper函数
检查每个字符串中的所有字符是否都是大写。
s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', '']) s1.str.isupper()
效果如下:
5.13 get_dummies函数
按 sep 拆分系列中的每个字符串并返回一个 虚拟/指标变量的dataframe。
s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', '']) s1.str.get_dummies()
效果如下:
该函数还可以进行此类匹配,注意输入的形式
s1=pd.Series(['a|b', np.nan, 'a|c']) s1.str.get_dummies()
效果如下:
6.其他
6.1 strip
删除前导和尾随字符。
s1 = pd.Series(['1. Ant. ', '2. Bee!\n', '3. Cat?\t', np.nan]) s1.str.strip()
效果如下:
6.2 lstrip
删除系列/索引中的前导字符。
6.3 rstrip
删除系列/索引中的尾随字符。
到此这篇关于pandas中对于文本类型数据的处理汇总的文章就介绍到这了,更多相关pandas文本类型数据处理内容请搜索猪先飞以前的文章或继续浏览下面的相关文章希望大家以后多多支持猪先飞!
原文出处:https://blog.csdn.net/qq_41780234/article/details/120727900
相关文章
pandas pd.read_csv()函数中parse_dates()参数的用法说明
这篇文章主要介绍了pandas pd.read_csv()函数中parse_dates()参数的用法说明,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-05- 今天小编就为大家分享一篇Pandas实现DataFrame按行求百分数(比例数),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-09
- 本文主要介绍了python使用pandas按照行数分割表格,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-08-13
- 这篇文章主要介绍了解决python3安装pandas出错的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-05-20
- 比较操作是很简单的基础知识,不过Pandas中的比较操作有一些特殊的点,本文介绍的非常详细,对正在学习python的小伙伴们很有帮助.需要的朋友可以参考下...2021-05-20
- 这篇文章主要介绍了用pandas划分数据集实现训练集和测试集,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-20
- 这篇文章主要介绍了pandas 实现将两列中的较大值组成新的一列,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-26
- pandas 读取excel文件使用的是 read_excel方法。本文将详细解析read_excel方法的常用参数,以及实际的使用示例,感兴趣的朋友跟随小编一起看看吧...2021-11-01
解决python pandas读取excel中多个不同sheet表格存在的问题
这篇文章主要介绍了解决python pandas读取excel中多个不同sheet表格存在的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-07-14- 笔者最近正在学习Pandas数据分析,将自己的学习笔记做成一套系列文章。本节主要记录Pandas中使用stack和pivot实现数据透视。感兴趣的小伙伴们可以参考一下...2021-09-05
Pandas.DataFrame转置的实现 <font color=red>原创</font>
这篇文章主要介绍了Pandas.DataFrame转置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-09- 这篇文章主要介绍了对python pandas中 inplace 参数的理解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-06-28
- 这篇文章主要介绍了pandas 实现某一列分组,其他列合并成list的案例。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-26
- 今天给大家带来的是关于Python的相关知识,文章围绕着Pandas常用函数方法展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下...2021-06-16
- 这篇文章主要介绍了Pandas的MultiIndex多层索引使用说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-18
- 今天小编就为大家分享一篇Pandas 解决dataframe的一列进行向下顺移问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-09
- 这篇文章主要介绍了python 用pandas实现数据透视表功能的方法,帮助大家更好的理解和使用python,感兴趣的朋友可以了解下...2020-12-21
- 这篇文章主要介绍了基于pandas向csv添加新的行和列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-26
- 这篇文章主要介绍了快速解释如何使用pandas的inplace参数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-23
- 时间偏移就是在指定时间往前推或者往后推一段时间,即加减一段时间之后的时间,本文使用Python实现,感兴趣的可以了解一下...2021-08-08