阅读 141

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

                                                    下面看下pandas中字符串类处理函数吧,内容如下所示:

                                                    1.英文字母大小写转换及填充

                                                    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函数,该函数是按照索引进行合并的。

                                                    1
                                                    2
                                                    3
                                                    4
                                                    5
                                                    6
                                                    7
                                                    8
                                                    9
                                                    10
                                                    11
                                                    12
                                                    13
                                                    14
                                                    15
                                                    16
                                                    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 一列 列表形式的文本合并为一列

                                                    1
                                                    2
                                                    3
                                                    4
                                                    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('_')

                                                    使用前:

                                                    join使用前

                                                    使用后:

                                                    join使用后

                                                    2.3 一列字符串与自身合并成为一列

                                                    1
                                                    2
                                                    3
                                                    4
                                                    5
                                                    s = pd.Series(['a', 'b', 'c'])
                                                    #指定数字
                                                    s.str.repeat(repeats=2)
                                                    #指定列表
                                                    s.str.repeat(repeats=[1, 2, 3])

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

                                                    repeat数字
                                                    repeat指定列表

                                                    2.4 一列字符串拆分为多列

                                                    2.4.1 partition函数

                                                    partition函数,会将某列字符串拆分为3列,其中2列为值,1列为分隔符。
                                                    有两个参数进行设置,分别为:sep(分隔符,默认为空格),expand(是否生成dataframe,默认为True)

                                                    1
                                                    2
                                                    3
                                                    4
                                                    5
                                                    6
                                                    7
                                                    8
                                                    9
                                                    10
                                                    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)。

                                                    1
                                                    2
                                                    3
                                                    4
                                                    5
                                                    6
                                                    7
                                                    8
                                                    9
                                                    10
                                                    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是从末尾进行限制。

                                                    1
                                                    2
                                                    3
                                                    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 统计某列字符串中包含某个字符串的个数

                                                    1
                                                    2
                                                    s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
                                                    s.str.len()

                                                    3.2 统计字符串长度

                                                    1
                                                    2
                                                    s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
                                                    s.str.len()

                                                    效果图如下:

                                                    len

                                                    4.字符串内容查找(包含正则)

                                                     4.1 extract

                                                    可通过正则表达式来提取指定内容,小括号内的会生成一列

                                                    1
                                                    2
                                                    3
                                                    4
                                                    5
                                                    6
                                                    7
                                                    8
                                                    9
                                                    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,该函数可以提取所有符合条件的元素

                                                    1
                                                    2
                                                    3
                                                    4
                                                    5
                                                    6
                                                    7
                                                    8
                                                    9
                                                    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

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

                                                    显示结果如下:

                                                    find

                                                    4.4 rfind

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

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

                                                    查询结果如下:

                                                    rfind

                                                    4.5 findall

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

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

                                                    显示结果如下:

                                                    findall

                                                    4.6 get

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

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

                                                    效果如下图:

                                                    get

                                                    4.7 match

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

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

                                                    匹配效果图如下:

                                                    match

                                                    5.字符串逻辑判断

                                                    5.1 contains函数

                                                    测试模式或正则表达式是否包含在系列或索引的字符串中。
                                                    参数:
                                                    pat,字符串或正则表达式;
                                                    case,是否区分大小写,默认为True,即区分大小写;
                                                    flags,是否传递到re模块,默认为0;
                                                    na,对缺失值的处理方法,默认为nan;
                                                    regex,是否将pat参数当作正则表达式来处理,默认为True。

                                                    1
                                                    2
                                                    s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
                                                    s.str.contains('ap',case=True,na=False,regex=False)

                                                    效果图如下:

                                                    contains


                                                    5.2 endswith函数

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

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

                                                    匹配结果如下:

                                                    在这里插入图片描述

                                                    处理nan值

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.3 startswith函数

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

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

                                                    匹配如下:

                                                    在这里插入图片描述

                                                    5.4 isalnum函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.5 isalpha函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.6 isdecimal函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.7 isdigit函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.8 islower函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.9 isnumeric函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.10 isspace函数

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

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

                                                    效果如下:

                                                    ![isspace](https://img-blog.csdnimg.cn/ae2370a417bc4bddabbe9731e1637da3.png

                                                    5.11 istitle函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.12 isupper函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    5.13 get_dummies函数

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

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    该函数还可以进行此类匹配,注意输入的形式

                                                    1
                                                    2
                                                    s1=pd.Series(['a|b', np.nan, 'a|c'])
                                                    s1.str.get_dummies()

                                                    效果如下:

                                                    在这里插入图片描述

                                                    6.其他

                                                    6.1 strip

                                                    删除前导和尾随字符。

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

                                                    效果如下:

                                                    在这里插入图片描述

                                                    6.2 lstrip

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

                                                    6.3 rstrip

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

                                                    到此这篇关于pandas中对于文本类型数据的处理汇总的文章就介绍到这了


                                                    文章分类
                                                    后端
                                                    版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
                                                    相关推荐