如果最后一个字符以特定字符开头和结尾,则大写

时间:2019-04-10 13:20:56

标签: python pandas

如果最后一个字符以“ abc”开头并以“ n”结尾,则需要大写。我已经写了下面的代码,但是我似乎无法使它正常工作,任何更正/输入都非常适用

bhp['cc']=bhp['cc'].apply( lambda x:x[0:-1] + x[-1].upper() if(x.startswith('abc') & x.endswith('n')))

3 个答案:

答案 0 :(得分:1)

缺少else语句,因此apply不知道如果条件失败该怎么办。通过在else x条件之后添加if,它将起作用。

apply(lambda x:x[0:-1] + x[-1].upper() if(x.startswith('abc') & x.endswith('n')) else x)

答案 1 :(得分:0)

这将大写最后一个字符(在n之前),并将其余字符小写:

s = 'abcdirtybitn'

print(s[:-2].lower() + s[-2:].capitalize() if s.startswith('abc') and s.endswith('n') else s)

输出

abcdirtybiTn

如果您希望最后一个字符n大写:

print(s[:-1].lower() + s[-1:].capitalize() if s.startswith('abc') and s.endswith('n') else s)  # abcdirtybitN

编辑

如果您不想操纵/小写其余所有内容:

s = 'abcDirtyBitn'

print(s[:-1] + s[-1:].capitalize() if s.startswith('abc') and s.endswith('n') else s)

输出

abcDirtyBitN

AND

s = 'abcDirtyBitn'

print(s[:-2] + s[-2:].capitalize() if s.startswith('abc') and s.endswith('n') else s)

输出

abcDirtyBiTn

答案 2 :(得分:0)

我认为这可能是一种有效的解决方案:

In [47]: l
Out[47]: ['abcdfn', 'abc', 'abcn', 'Acv', 'Abc']

In [48]: df = pd.DataFrame(l)

In [49]: df
Out[49]:
        0
0  abcdfn
1     abc
2    abcn
3     Acv
4     Abc

In [50]: mask = df[0].str.startswith('abc') & df[0].str.endswith('n')

In [51]: df.loc[mask, 0] = df[mask][0].apply(lambda x : x[0:-1] + x[-1].upper())

In [52]: df
Out[52]:
        0
0  abcdfN
1     abc
2    abcN
3     Acv
4     Abc