一.大小写转换
1.转换全部字母:

将所有字母转换为小写:<Ss>.lower()
将所有字母转换为大写:<Ss>.upper()#参数说明:Ss:指定pandas.core.strings.StringMethods object,可通过<S>.str得到#实例:
>>> s=pd.Series(["ASjkdS","dKDsd","jksdAA"])
>>> s.str.lower()
0    asjkds
1     dkdsd
2    jksdaa
dtype: object
>>> s.str.upper()
0    ASJKDS
1     DKDSD
2    JKSDAA
dtype: object

2.转换单词首字母:

按标题的格式转换:<Ss>.title()#即所有单词(通过空格分割)的首字母均大写,其他字母均为小写#实例:
>>> s=pd.Series(["ASjkdS asASk","dKDsd JDj","jksdAA sJSDK"])
>>> s.str.title()
0    Asjkds Asask
1       Dkdsd Jdj
2    Jksdaa Sjsdk
dtype: object

3.转换首字母:

将字符串的首字母转换为大写:<Ss>.capitalize()#实例:接上
>>> s.str.capitalize()
0    Asjkds asask
1       Dkdsd jdj
2    Jksdaa sjsdk
dtype: object

4.互相转换:

是字母的大小写互相转换:<Ss>.swapcase()#即小写字母转换为大写,大写字母转换为小写#实例:接上
>>> s.str.swapcase()
0    asJKDs ASasK
1       DkdSD jdJ
2    JKSDaa Sjsdk
dtype: object

二.拼接与分割
1.拼接:

拼接字符串:<Ss>.cat([others=None,sep=None,na_rep=None])#参数说明:others:为None表示将<Ss>中的内容拼接起来为Series/Index/DataFrame/np.ndarray/list-like表示将<Ss>与others(其中的元素只能为str)的对应元素拼接起来sep:指定连接符;为str#连接符被放在用于拼接的2个子字符串之间na_rep:如果有缺失值,则将缺失值替换为na_rep后再拼接;为str#如果为None,则拼接出来是NaN#实例:
>>> s=pd.Series(["ASj23的sk看到了ASk","dKJDj","jk32s1dAA"])
>>> s.str.cat()
'ASj23的sk看到了ASkdKJDjjk32s1dAA'
>>> s2=pd.Series(["111","222","333"])
>>> s.str.cat(others=s2,sep="|")
0    ASj23的sk看到了ASk|111
1             dKJDj|222
2         jk32s1dAA|333
dtype: object
>>> s3=pd.Series(["aaa","bbb",None])
>>> s.str.cat(others=s3,sep="|")
0    ASj23的sk看到了ASk|aaa
1             dKJDj|bbb
2                   NaN
dtype: object
>>> s.str.cat(others=s3,sep="|",na_rep="???")
0    ASj23的sk看到了ASk|aaa
1             dKJDj|bbb
2         jk32s1dAA|???
dtype: object

2.使用分隔符分割:

使用分隔符从左侧开始分割:<Ss>.split([pat=" ",maxsplit=-1,expand=False])
使用分隔符从右侧开始分割:<Ss>.rsplit([sep=" ",maxsplit=-1,expand=False])#分隔符本身不包含在分割结果中
使用分隔符从左侧开始分割1次:<Ss>.partition([sep=" ",expand=True])
使用分隔符从右侧开始分割1次:<Ss>.rpartition([sep=" ",expand=True])#分割为3部分:分割符前,分割符,分割符后
查看分割出的各个值出现的次数:<Ss>.get_dummies([sep="|"])#分割规则同<Ss>.split(),且会完全分割#参数说明:pat/sep:指定分隔符;为str,默认为空格/"|"#也可以为位置参数maxsplit:指定最大分割次数;为int,默认为-1(表示直到分割完毕)expand:为True表示将结果展开为DataFrame/MultiINdex object为False表示直接返回Series/Index object#实例:
>>> s=pd.Series(["stasaaskjksad","ssasd","sa aad"])
>>> s.str.split()
0    [stasaaskjksad]
1            [ssasd]
2          [sa, aad]
dtype: object
>>> s.str.split(pat="a")
0    [st, s, , skjks, d]
1               [ss, sd]
2            [s,  , , d]
dtype: object
>>> s.str.split(pat="a",expand=True)0   1     2      3     4
0  st   s        skjks     d
1  ss  sd  None   None  None
2   s                d  None
>>> s.str.partition()0  1    2
0  stasaaskjksad
1          ssasd
2             sa     aad
>>> s.str.partition(sep="a",expand=False)
0    (st, a, saaskjksad)
1            (ss, a, sd)
2           (s, a,  aad)
dtype: object
>>> s.str.get_dummies("a")d  s  sd  skjks  ss  st
0  0  1  1   0      1   0   1
1  0  0  0   1      0   1   0
2  1  1  1   0      0   0   0

三.增
1.填充:

在两侧填充指定字符到指定长度:<Ss>.center(width=None[,fillchar=" "])#优先在右侧填充
在右侧填充指定字符到指定长度:<Ss>.ljust(width=None[,fillchar=" "])
在左侧填充指定字符到指定长度:<Ss>.rjust(width=None[,fillchar=" "])
在左侧填充"0"到指定长度:<Ss>.zfill(width=None)
在指定位置填充指定字符到指定长度:<Ss>.pad(width=None[,side="left",fillchar=" "])#参数说明:width:指定填充后的字符串长度;为int#如果原字符串已经达到或超过该长度,则不变fillchar:指定用于填充的字符;为str,默认为空格side:指定填充位置;可为"left"(默认值)/"right"/"both"#为"both"时优先在右侧填充#实例:
>>> s=pd.Series(["aa","aaa","aa aa"])
>>> s.str.center(width=4,fillchar="*")
0     *aa*
1     aaa*
2    aa aa
dtype: object
>>> s.str.pad(width=4,fillchar="*",side="both")
0     *aa*
1     aaa*
2    aa aa
dtype: object
>>> s.str.zfill(width=6)
0    0000aa
1    000aaa
2    0aa aa
dtype: object

2.插入:

在字符间插入指定字符:<Ss>.join(sep=None)#参数说明:sep:指定要插入的字符;为str#实例:
>>> s=pd.Series(["aaa","bb"])
>>> s.str.join(sep=" ")
0    a a a
1      b b
dtype: object

3.扩展:

将<Ss>扩展为指定倍:<Ss>.repeat(repeats=None)#会将<Ss>中的每1行都复制为repeats份#参数说明:repeats:指定倍数;为int/int list#实例:
>>> s=pd.Series(["aaa","bb"])
>>> s.str.repeat(repeats=3)
0    aaaaaaaaa
1       bbbbbb
dtype: object
>>> s.str.repeat(repeats=[2,1])
0    aaaaaa
1        bb
dtype: object

四.内容判断与查找
1.是否包含:

判断是否包含指定字符串:<Ss>.contains(pat=None[,case=True,flag=0,na=np.nan,regex=True])#参数说明:pat:指定字符串;为str(支持正则表达式)#也可为位置参数case:是否区分大小写;为boolflag:指定传递到re模块的参数(用于正则表达式)na:用于填充缺失值的值;默认为np.nan(即保持不变)regex:是否允许在pat中使用正则表达式;为bool#实例:
>>> s=pd.Series(["abcd","dcba","3wsdw",None,math.nan])
>>> s.str.contains("a")
0     True
1     True
2    False
3     None
4      NaN
dtype: object
>>> s.str.contains("^a",na=None)
0     True
1    False
2    False
3     None
4      NaN
dtype: object

2.起始/结束:

判断是否以指定字符串开始:<Ss>.match(pat=None[,case=True,flag=0,na=np.nan])
判断是否以指定字符串结束:<Ss>.endswith(pat=None[,na=np.nan])#实例:接上
>>> s.str.match("a")
0     True
1    False
2    False
3     None
4      NaN
dtype: object
>>> s.str.endswith("a")
0    False
1     True
2    False
3     None
4      NaN
dtype: object

3.字符类型:

是否均为字母/数字/汉字:<Ss>.isalnum()
是否均为字母/汉字:<Ss>.isalpha()
是否均为数字:<Ss>.isdigit()#支持特殊格式的阿拉伯数字,如①;但不支持中文
是否均为空白字符:<Ss>.isspace()
是否不包含大写字母且包含小写字母:<Ss>.islower()
是否不包含小写字母且包含大写字母:<Ss>.isupper()
是否符合标题格式:<Ss>.istitle()#单词首字母为大写,其他字母均为小写
是否均为数字:<Ss>.isnumeric()#支持中文及特殊格式的阿拉伯数字
是否均为数字:<Ss>.isdecimal()#仅支持普通格式的阿拉伯数字,如1#实例:
>>> s=pd.Series(["1获得sdd","大奖78","   ","ADCJK","SSDs","sad","Ads Jss","As DA","1①","31","一"])
>>> pd.DataFrame([s.str.isalnum(),s.str.isalpha(),s.str.isdigit(),s.str.isnumeric(),s.str.isdecimal(),s.str.isspace(),s.str.islower(),s.str.isupper(),s.str.istitle()])0      1      2      3      4      5      6      7      8      9      10
0   True   True  False   True   True   True  False  False   True   True   True
1  False  False  False   True   True   True  False  False  False  False   True
2  False  False  False  False  False  False  False  False   True   True  False
3  False  False  False  False  False  False  False  False   True   True   True
4  False  False  False  False  False  False  False  False  False   True  False
5  False  False   True  False  False  False  False  False  False  False  False
6   True  False  False  False  False   True  False  False  False  False  False
7  False  False  False   True  False  False  False  False  False  False  False
8  False  False  False  False  False  False   True  False  False  False  False

4.查找指定内容:

查找并返回第1次匹配到的内容:<Ss>.extract(pat=None[,flags=0,expand=True])
查找并返回匹配到的所有内容:<Ss>.extractall(pat=None[,flags=0])#返回匹配到的所有内容构成的DataFrame object
查找并返回匹配到的所有内容:<Ss>.findall(pat=None)#返回Series对象,其中的元素为list#参数说明:flags参数同 (1) 部分pat:指定要查找的内容;为str(支持正则表达式)#也可为位置参数expand:为True表示返回DataFrame object为False表示返回Series/Index/DataFrame object#实例:
>>> s=pd.Series(['aSd','asd','dfd fsAsf sfs'])
>>> s.str.extract('([a-z]+)',expand=True)0
0    a
1  asd
2  dfd
>>> s.str.extract('([a-z]+)',expand=False)
0      a
1    asd
2    dfd
dtype: object
>>> type(s.str.extract('([a-z]+)'))
<class 'pandas.core.frame.DataFrame'>
>>> type(s.str.extract('([a-z]+)',expand=False))
<class 'pandas.core.series.Series'>
>>> s.str.extractall('([a-z]+)')0match
0 0        a1        d
1 0      asd
2 0      dfd1       fs2       sf3      sfs
>>> s.str.findall('([a-z]+)')
0                [a, d]
1                 [asd]
2    [dfd, fs, sf, sfs]
dtype: object

5.检索指定内容的位置:

从左往右检索指定内容在<Ss>中的位置:<Ss>.find(sub=None[])
从右往左检索指定内容在<Ss>中的位置:<Ss>.rfind()#均返回sub在<Ss>中首次出现的起始位置(最左侧)的索引;如没有检索到,均返回-1
从左往右检索指定内容在<Ss>中的位置:<Ss>.index()
从右往左检索指定内容在<Ss>中的位置:<Ss>.rindex()#均返回sub在<Ss>中首次出现的起始位置(最左侧)的索引;如没有检索到,均报错#参数说明:sub:指定要检索的内容;为str(支持正则表达式)#也可为位置参数start,stop:指定检索的起始/结束位置的索引;为int#实例:
>>> s=pd.Series(["111aaaaffaaa","aaa2aa"])
>>>> s.str.find("aaa")
0    3
1    0
dtype: int64
>>> s.str.rfind("aaa")
0    9
1    0
dtype: int64
>>> s.str.find("ddd")
0   -1
1   -1
dtype: int64
>>> s.str.find("aa",start=4)
0    4
1    4
dtype: int64
>>> s.str.index("ddd")
Traceback (most recent call last):File "<stdin>", line 1, in <module>File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 2001, in wrapperreturn func(self, *args, **kwargs)File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 3242, in indexresult = str_index(self._parent, sub, start=start, end=end, side="left")File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 1447, in str_indexreturn _na_map(f, arr, dtype=np.dtype("int64"))File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 130, in _na_mapreturn _map_object(f, arr, na_mask=True, na_value=na_result, dtype=dtype)File "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 215, in _map_objectresult = lib.map_infer_mask(arr, f, mask.view(np.uint8), convert)File "pandas\_libs\lib.pyx", line 2361, in pandas._libs.lib.map_infer_maskFile "C:\Users\Euler\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\strings.py", line 1443, in <lambda>f = lambda x: getattr(x, method)(sub, start)
ValueError: substring not found

6.查找指定位置的内容:

查找指定位置的内容:<Ss>.get(i=None)
查找指定范围的内容:<Ss>.slice([start=0,stop=n,step=1])#均返回Series对象#参数说明:i:指定位置的索引;为int#也可为位置参数start,stop,step:分别指定截取的起始位置/结束位置/步长;为int,默认为0/n/1#n仅表示截取<Ss>直到结尾,但实际使用时不能直接写n;均可为位置参数#实例:
>>> s=pd.Series(["s的3健d 34地方","ddf的耳34的d"])
>>> s.str.get(i=3)
0    健
1    的
dtype: object
>>> s.str.slice(1,7,2)
0    的健s
1    d的3
dtype: object

五.删改
1.换行:

使单词单独成行:<Ss>.wrap(width=None[,expand_tabs=True,replace_whitespace=True,drop_whitespace=True,break_long_words=True,break_on_hyphens=True])#即在单词结尾处插入"\n"#参数说明:width:指定每行的最大长度;为int#也可为位置参数expand_tabs:是否将制表符扩展为(4个)空格;为boolreplace_whitespace:是否用空格替换所有空白;为booldrop_whitespace:是否忽略空白(空格,制表符,换行符等);为bool#即是否将空白视为1个单词break_long_words:是否分解长度超过width的单词(通过空白分隔);为bool#为True时,超过width的单词会被分解;为False时不会break_on_hyphens:是否在连字符后换行;为bool#实例:接上
>>> s.str.wrap(1)
0          a\na
1       a\na\na
2    a\na\na\na
dtype: object
>>> s.str.wrap(width=2)
0        aa
1     aa\na
2    aa\naa
dtype: object
>>> s=pd.Series(["aa    ss"])
>>> s.str.wrap(width=2,expand_tabs=False,drop_whitespace=False)
0    aa\n \nss
dtype: object
>>> s.str.wrap(width=2,drop_whitespace=False)
0    aa\n  \n  \n  \nss
dtype: object
>>> s.str.wrap(1)
0    a\na\ns\ns
dtype: object
>>> s.str.wrap(1,break_long_words=False)
0    aa\nss
dtype: object
>>> s=pd.Series(["aa   ss sasajkjkajkj"])
>>> s.str.wrap(width=6,break_long_words=False)
0    aa\nss\nsasajkjkajkj
dtype: object
>>> s.str.wrap(width=7,break_long_words=False)
0    aa   ss\nsasajkjkajkj
dtype: object

2.去除边缘处的字符:

删除两侧的指定字符:<Ss>.strip([to_strip=" "])
删除右侧的指定字符:<Ss>.rstrip([to_strip=" "])
删除左侧的指定字符:<Ss>.lstrip([to_strip=" "])#参数说明:to_strip:指定要删除的字符;为str,默认为空格#也可为位置参数#实例:
>>> s=pd.Series(["  sta","ss","sa "],index=["a","b","c"])
>>> print(s)
a      sta
b       ss
c      sa
dtype: object
>>> s2=s.str.strip()
>>> print(s2)
a    sta
b     ss
c     sa
dtype: object

3.修改:

修改指定内容:<Ss>.replace(pat=None,repl=None[,n=-1,case=None,flags=0])
修改指定字符:<Ss>.translate(table=None)#参数说明:pat:指定要替换的内容;为str(支持正则表达式)/编译了的正则表达式#也可为位置参数repl:指定要替换成的内容;为str/functionn:指定最大替换次数;为int,默认为-1(替换所有)case:是否区分大小写;为bool,若pat为str则默认为True#若pat为编译了的正则表达式(参见 python.正则表达式re模块.四 部分的re.compile())则不能设置flags:指定要传递给re模块的参数#若pat为编译了的正则表达式则不能设置table:指定如何更新字符;为dict,格式为{<ord>:<sub>}(key为ASCII码,value为str/ASCII码/None)#虽然key/value都可以是ASCII码,但替换的/替换为的均是相应的char而非int#实例:
>>> s=pd.Series(["aaab3sdsB42","asb3234da","aaabds"])
>>> s.str.replace("b[0-9]*","qqq")
0    aaaqqqsdsB42
1         asqqqda
2        aaaqqqds
dtype: object
>>> s.str.replace("b[0-9]*","qqq",case=False)
0    aaaqqqsdsqqq
1         asqqqda
2        aaaqqqds
dtype: object
>>> s.str.translate(table={ord("a"):"d",ord("s"):ord("3"),ord("2"):None})
0    dddb33d3B4
1      d3b334dd
2        dddbd3
dtype: object

4.修改指定位置处的内容:

更新指定位置处的内容:<Ss>.slice_replace(start=None,stop=None,repl=None)#参数说明:start/stop同 4.(6) 部分;repl同 (3) 部分#实例:接上
>>> s.str.slice_replace(2,4,"www")
0    aawww3sdsB42
1      aswww234da
2         aawwwds
dtype: object

六.其他
1.统计:

统计字符串长度:<Ss>.len()
统计指定字符串出现的次数:<Ss>.count(pat=None[,flags=0])#参数说明:同 4.(1) 部分的<Ss>.contains(#实例:
>>> s=pd.Series(["asaaasdaa","saadaadsAa"])
>>> s.str.len()
0     9
1    10
dtype: int64
>>> s.str.count(pat="aa")
0    2#也就是说,在字符串的某部分被匹配上后,不会再用于之后的匹配
1    2
dtype: int64
>>> s=pd.Series(["asaaaasdaa","saadaadsAa"])
>>> s.str.count(pat="aa")
0    3
1    2
dtype: int64

2.编/解码:

编码为字节对象:<Ss>.encode(encoding=None[,error="static"])
解码为字符串:<Ss>.decode(encoding=None[,error="static"])
返回字符串的Unicode标准格式:<Ss>.normalize(form=None)#参数说明:encoding:指定编码方式;为str#也可为位置参数error:指定出现错误时如何处理;可取值见下为"static"(默认值)表示抛出异常为"ignore"表示忽略非法字符为"replace"表示使用?替代非法字符为"xmlcharrefreplace"表示通过XML的字符引用表示非法字符为"backslashreplace"表示用Python的反向转义序列表示非法字符form:指定规范化Unicode的标准;可为"NFC"/"NFKC"/"NFD"/"NFKD"#实例:
>>> s=pd.Series(["我是JACK","阿斯顿发"])
>>> s.str.encode("utf-8")
0                      b'\xe6\x88\x91\xe6\x98\xafJACK'
1    b'\xe9\x98\xbf\xe6\x96\xaf\xe9\xa1\xbf\xe5\x8f...
dtype: object
>>> s.str.encode("ascii","ignore")
0    b'JACK'
1        b''
dtype: object
>>> s.str.encode("ascii","replace")
0    b'??JACK'
1      b'????'
dtype: object
>>> s.str.encode("ascii","xmlcharrefreplace")
0                b'我是JACK'
1    b'阿斯顿发'
dtype: object
>>> s.str.encode("ascii","backslashreplace")
0              b'\\u6211\\u662fJACK'
1    b'\\u963f\\u65af\\u987f\\u53d1'
dtype: object
>>> s.str.normalize("NFC")
0    我是JACK
1      阿斯顿发
dtype: object
>>> s=pd.Series([b"asdfghjkl",b"qwertyuiop",b"zxcvbnm"])
>>> s.str.decode("ascii")
0     asdfghjkl
1    qwertyuiop
2       zxcvbnm
dtype: object

Python 第三方模块 数据分析 Pandas模块 字符串处理相关推荐

  1. python 数据分析模块_Python数据分析pandas模块用法实例详解

    本文实例讲述了Python数据分析pandas模块用法.分享给大家供大家参考,具体如下: pandas pandas10分钟入门,可以查看官网:10 minutes to pandas 也可以查看更复 ...

  2. Python开发案例,pandas模块使用,实现预测NBA比赛结果

    主要思路 (1)数据选取 获取数据的链接为: https://www.basketball-reference.com/ 获取的数据内容为: 每支队伍平均每场比赛的表现统计: 每支队伍的对手平均每场比 ...

  3. python怎么安装pandas模块-python如何导入安装pandas模块并使用别名

    Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持. Pandas的名称来自于面板数据(panel data)和python数据分析(data anal ...

  4. Python模块之Pandas模块学习笔记

    目录 一.模块的安装 二.数据结构 1. DataFrame的创建 2. DataFrame索引的修改 3. DataFrame数据信息查看 三.文件的读取和写入 1. 读取 2. 写入 四. 数据的 ...

  5. [转载] python中的numpy模块和pandas模块的区别_numpy 模块和 pandas 模块

    参考链接: Python中的numpy.radians和deg2rad 一.numpy模块 1.1 numpy 简介 numpy是python的一种开源的数值计算扩展库,这种库可用来存储和处理大型nu ...

  6. python炒股模块_Python数据分析-numpy模块、pandas模块.基本操作、股票案例

    索引操作和列表同理 arr = np.random.randint(0,100,size=(5,6)) arr array([[14, 89, 71, 96, 1, 94], [30, 98, 10, ...

  7. python中的numpy模块和pandas模块的区别_python的numpy模块- 01.pandas基本数据类型

    01.pandas基本数据类型 import pandas as pd import numpy as np from pandas import Series,DataFrame 1. Series ...

  8. python - 第三方库下载itchat模块

    API(应用程序编程接口) API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组 ...

  9. python读取dat数据anaconda_基于python的大数据分析-pandas数据读取(代码实战)

    我们常见的数据存储格式无非就是csv.excel.txt以及数据库等形式. 数据读取 在pandas中可以使用一些函数完成数据的读取.比如read_csv.read_excel.read_table. ...

最新文章

  1. 一个框架看懂优化算法之异同 SGD/AdaGrad/Adam
  2. 手机应用:非功能需求 Check List
  3. Flutter开发Flutter与原生OC、Java的交互通信-1(47)
  4. iOS开发-plist文件增删改查
  5. 9月22日 奇怪的贸易
  6. 【Matlab 图像】边缘检测算法及效果演示
  7. bat 批处理获取时间语法格式
  8. 基于svm图像分类C语言,基于SVM的图像分类算法与实现.PDF
  9. HTTP请求的GET与POST方式的区别
  10. Stack与queue的底层实现、区别。
  11. Three Memory Management Models
  12. xna中的截屏操作处理
  13. 写了一套优雅接口之后,领导让我给大家讲讲这背后的技术原理
  14. Angular服务器端渲染
  15. Unity HTC Vive手柄汉诺塔操作
  16. 15分钟破解保险箱!美国小哥200美元自制开锁机器人
  17. 深度森林DF21、deep forest、gcForest
  18. 两分钟内教会你如何给视频加配音,快速掌握配音技巧!
  19. php获取文件夹下所有文件名(php遍历目录)
  20. 基于Redis实现查找附近的人

热门文章

  1. 第一次作业——肖祥英
  2. TaintDroid 剖析之 DVM 变量级污点跟踪(下篇)
  3. 马斯克疯狂理念在中国落地?国产高速飞行列车即将登场
  4. unity3D-learning:UI背包系统
  5. 安卓机开启开发者选项
  6. Java的Scanner对象
  7. 函数声明放在头文件中,函数的定义放在实现文件中,然后在主函数中调用
  8. Freda的队列 简单模拟
  9. php制作公司五章,圆形印章和椭圆形印章,正方形印章,圆角正方形印章,圆角框
  10. 华三H3C交换机如何配置堆叠irf虚拟化之如何配置检测机制(配置BFD MAD检测)