s = pd.Series(['lower', 'CAPITALS', 'this is a sentence', 'SwApCaSe'])
注意:多列字符串在合并时,推荐使用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='-')
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('_')
s = pd.Series(['a', 'b', 'c'])
#指定数字
s.str.repeat(repeats=2)
#指定列表
s.str.repeat(repeats=[1, 2, 3])
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()
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 = "/",expand=True)
#4.使用正则表达式来进行拆分,并生成新的dataframe
s = pd.Series(["1+1=2"])
s.str.split(r"\+|=", expand=True)
如果不设置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)
#1.普通字符
s = pd.Series(['A', 'B','Baca', np.nan])
s.str.count('a')
#2.特殊字符
s = pd.Series(['$', 'B', 'Aab$', '$$ca', 'C$B$'])
s.str.count('\$')
#3.在索引中进行统计
s=pd.Index(['A', 'A', 'Aaba', 'cat'])
s.str.count('a')
s = pd.Series(['dog', '', 5,{'foo' : 'bar'},[2, 3, 5, 7],('one', 'two', 'three')])
s.str.len()
可通过正则表达式来提取指定内容,小括号内的会生成一列
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)' )
#生成1列
s.str.extract(r'[ab](\d)', expand=True)
区别于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\d)" )
#提取符合条件的a、b和数字,结果为多重索引多列
s.str.extractall(r"(?P[ab])(?P\d)" )
#提取符合条件的a、b和数字,添加问号后,一个匹配不上可以继续向后匹配,结果为多重索引多列
s.str.extractall(r"(?P[ab])?(?P\d)" )
查询固定字符串在目标字符串中的最小索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1
s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.find('p')
查询固定字符串在目标字符串中的最大索引。
若需要查询的字符串未出现在目标字符串中,则显示为-1。
s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.rfind('p',start=1)
查找系列/索引中所有出现的模式或正则表达式
s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.findall(r'[ac]')
从列表、元组或字符串中的每个元素中提取元素的系列/索引。
s = pd.Series(["String",
(1, 2, 3),
["a", "b", "c"],
123,
-456,
{1: "Hello", "2": "World"}])
s.str.get(1)
确定每个字符串是否与参数中的正则表达式匹配。
s = pd.Series(['appoint', 'price', 'sleep','amount'])
s.str.match('^[ap].*t')
匹配效果图如下:
测试模式或正则表达式是否包含在系列或索引的字符串中。
参数:
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)
测试每个字符串元素的结尾是否与字符串匹配。
s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e')
s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.endswith('e',na=False)
测试每个字符串元素的开头是否与字符串匹配。
s = pd.Series(['APpoint', 'Price', 'cap','approve',123])
s.str.startswith('a',na=False)
检查每个字符串中的所有字符是否都是字母数字。
s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalnum()
检查每个字符串中的所有字符是否都是字母。
s1 = pd.Series(['one', 'one1', '1', ''])
s1.str.isalpha()
检查每个字符串中的所有字符是否都是十进制的。
s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdecimal()
检查每个字符串中的所有字符是否都是数字。
s1 = pd.Series(['one', 'one1', '1',''])
s1.str.isdigit()
检查每个字符串中的所有字符是否都是小写。
s1 = pd.Series(['one', 'one1', '1',''])
s1.str.islower()
检查每个字符串中的所有字符是否都是数字。
s1 = pd.Series(['one', 'one1', '1','','3.6'])
s1.str.isnumeric()
检查每个字符串中的所有字符是否都是空格。
s1 = pd.Series([' one', '\t\r\n','1', '',' '])
s1.str.isspace()
检查每个字符串中的所有字符是否都是标题形式的大小写。
s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.istitle()
检查每个字符串中的所有字符是否都是大写。
s1 = pd.Series(['leopard', 'Golden Eagle', 'SNAKE', ''])
s1.str.isupper()
按 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()
删除前导和尾随字符。
s1 = pd.Series(['1. Ant. ', '2. Bee!\n', '3. Cat?\t', np.nan])
s1.str.strip()
删除系列/索引中的前导字符。
删除系列/索引中的尾随字符。