pandas中对于文本类数据的处理汇总

pandas中字符串类处理函数

*

+
* 1.英文字母大小写转换及填充
* 2.字符串合并与拆分
*
2.1 多列字符串合并
2.2 一列 列表形式的文本合并为一列
2.3 一列字符串与自身合并成为一列
2.4 一列字符串拆分为多列

+ 2.4.1 partition函数
+ 2.4.2 split函数
+ 2.4.3 rsplit函数
* 3.字符串统计
*
3.1 统计某列字符串中包含某个字符串的个数
3.2 统计字符串长度
* 4.字符串内容查找(包含正则)
*
4.1 extract
4.2 extractall
4.3 find
4.4 rfind
4.5 findall
4.6 get
4.7 match
* 5.字符串逻辑判断
*
5.1 contains函数
5.2 endswith函数
5.3 startswith函数
5.4 isalnum函数
5.5 isalpha函数
5.6 isdecimal函数
5.7 isdigit函数
5.8 islower函数
5.9 isnumeric函数
5.10 isspace函数
5.11 istitle函数
5.12 isupper函数
5.13 get_dummies函数
* 6.其他
*
6.1 strip
6.2 lstrip
6.3 rstrip

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']})

s['col1'].str.cat([s['col2']])

s['col1'].str.cat([s['col2']],na_rep='*')

s['col1'].str.cat([s['col2']],na_rep='*',sep=',')

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('_')

使用前:

pandas中对于文本类数据的处理汇总
使用后:
pandas中对于文本类数据的处理汇总
2.3 一列字符串与自身合并成为一列
s = pd.Series(['a', 'b', 'c'])

s.str.repeat(repeats=2)

s.str.repeat(repeats=[1, 2, 3])

使用该函数后,效果图分别如下:

pandas中对于文本类数据的处理汇总
pandas中对于文本类数据的处理汇总
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])

s.str.split()

s.str.split(n=2)

s.str.split(pat = "/",expand=True)

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])

s.str.rsplit(n=2)

3.字符串统计

3.1 统计某列字符串中包含某个字符串的个数

s = pd.Series(['A', 'B','Baca', np.nan])
s.str.count('a')

s = pd.Series(['$', 'B', 'Aab$', '$$ca', 'C$B$'])
s.str.count('\$')

s=pd.Index(['A', 'A', 'Aaba', 'cat'])
s.str.count('a')
3.2 统计字符串长度
s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
s.str.len()

效果图如下:

pandas中对于文本类数据的处理汇总

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[ab])(?P\d)')

s.str.extract(r'[ab](\d)', expand=True)
4.2 extractall

区别于extract,该函数可以提取所有符合条件的元素

s = pd.Series(["a1a2", "b1", "c1"], index=["A", "B", "C"])

s.str.extractall(r"[ab](\d)")

s.str.extractall(r"[ab](?P\d)")

s.str.extractall(r"(?P[ab])(?P\d)")

s.str.extractall(r"(?P[ab])?(?P\d)")
4.3 find

查询固定字符串在目标字符串中的最小索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.find('p')

显示结果如下:

pandas中对于文本类数据的处理汇总
4.4 rfind

查询固定字符串在目标字符串中的最大索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1。

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.rfind('p',start=1)

查询结果如下:

pandas中对于文本类数据的处理汇总
4.5 findall

查找系列/索引中所有出现的模式或正则表达式

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.findall(r'[ac]')

显示结果如下:

pandas中对于文本类数据的处理汇总
4.6 get

从列表、元组或字符串中的每个元素中提取元素的系列/索引。

s = pd.Series(["String",
               (1, 2, 3),
               ["a", "b", "c"],
               123,
               -456,
               {1: "Hello", "2": "World"}])
s.str.get(1)

效果如下图:

pandas中对于文本类数据的处理汇总
4.7 match

确定每个字符串是否与参数中的正则表达式匹配。

s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.match('^[ap].*t')

匹配效果图如下:

pandas中对于文本类数据的处理汇总

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)

效果图如下:

pandas中对于文本类数据的处理汇总
5.2 endswith函数

测试每个字符串元素的结尾是否与字符串匹配。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e')

匹配结果如下:

pandas中对于文本类数据的处理汇总
处理nan值
s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e',na=False)

效果如下:

pandas中对于文本类数据的处理汇总
5.3 startswith函数

测试每个字符串元素的开头是否与字符串匹配。

s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.startswith('a',na=False)

匹配如下:

pandas中对于文本类数据的处理汇总
5.4 isalnum函数

检查每个字符串中的所有字符是否都是字母数字。

s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalnum()

效果如下:

pandas中对于文本类数据的处理汇总
5.5 isalpha函数

检查每个字符串中的所有字符是否都是字母。

s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalpha()

效果如下:

pandas中对于文本类数据的处理汇总
5.6 isdecimal函数

检查每个字符串中的所有字符是否都是十进制的。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdecimal()

效果如下:

pandas中对于文本类数据的处理汇总
5.7 isdigit函数

检查每个字符串中的所有字符是否都是数字。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdigit()

效果如下:

pandas中对于文本类数据的处理汇总
5.8 islower函数

检查每个字符串中的所有字符是否都是小写。

s1 = pd.Series(['one', 'one1', '1',''])
s1.str.islower()

效果如下:

pandas中对于文本类数据的处理汇总
5.9 isnumeric函数

检查每个字符串中的所有字符是否都是数字。

s1 = pd.Series(['one', 'one1', '1','','3.6'])
s1.str.isnumeric()

效果如下:

pandas中对于文本类数据的处理汇总
5.10 isspace函数

检查每个字符串中的所有字符是否都是空格。

s1 = pd.Series([' one', '\t\r\n','1', '',' '])
s1.str.isspace()

效果如下:

pandas中对于文本类数据的处理汇总
5.11 istitle函数

检查每个字符串中的所有字符是否都是标题形式的大小写。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.istitle()

效果如下:

pandas中对于文本类数据的处理汇总
5.12 isupper函数

检查每个字符串中的所有字符是否都是大写。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.isupper()

效果如下:

pandas中对于文本类数据的处理汇总
5.13 get_dummies函数

按 sep 拆分系列中的每个字符串并返回一个 虚拟/指标变量的dataframe。

s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.get_dummies()

效果如下:

pandas中对于文本类数据的处理汇总
该函数还可以进行此类匹配,注意输入的形式
s1=pd.Series(['a|b', np.nan, 'a|c'])
s1.str.get_dummies()

效果如下:

pandas中对于文本类数据的处理汇总

6.其他

6.1 strip

删除前导和尾随字符。

s1 = pd.Series(['1. Ant.  ', '2. Bee!\n', '3. Cat?\t', np.nan])
s1.str.strip()

效果如下:

pandas中对于文本类数据的处理汇总
6.2 lstrip

删除系列/索引中的前导字符。

6.3 rstrip

删除系列/索引中的尾随字符。

Original: https://blog.csdn.net/qq_41780234/article/details/120727900
Author: theskylife
Title: pandas中对于文本类数据的处理汇总

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/676692/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球