如果长度不等于x,Python将字符串替换为空

时间:2019-05-14 20:58:05

标签: python dataframe replace string-length

我有以下数据框:

df=pd.DataFrame({'ssn':[12345,54321,111,47895,222311],'Name':['john','mike','adam','doug','liz']})

DataFrame包含一个“ ssn”,应该只包含5位数字。我想用空格替换少于或大于5位的所有行。

所需的输出如下:

   Name   ssn
0  john   12345
1  mike   54321
2  adam   
3  doug   47895
4  liz    

我提到了SO replace string if length is less than x的以下帖子 但是,将相同的解决方案与以下命令结合使用会给我一个错误:

mask = df['ssn'].str.len() == 5
df['ssn'] = df['ssn'].mask(mask, df['ssn'].str.replace(df['ssn'], ''))
Traceback (most recent call last): 
TypeError: 'Series' objects are mutable, thus they cannot be hashed

任何建议,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

您也可以使用df.apply来完成此操作:df['ssn'] = df['ssn'].apply(lambda a: a if len(str(a))==5 else '')

答案 1 :(得分:1)

您的列ssn包含数字而不是字符串,这就是为什么它不起作用的原因。尝试以下操作:

mask = df['ssn'].astype(str).str.len() != 5
df.loc[mask, 'ssn'] = ''

In [1] : print(df)
Out[1] :    Name    ssn
0  john  12345
1  mike  54321
2  adam       
3  doug  47895
4   liz