Python 如果长度不等于 x,则将字符串替换为空
Python replace string with empty if length not equal to x
我有以下数据框:
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 中引用了以下 post
但是,在使用以下命令使用相同的解决方案时会出现错误:
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
如果有任何建议,我将不胜感激。
您也可以使用 df.apply
执行此操作:df['ssn'] = df['ssn'].apply(lambda a: a if len(str(a))==5 else '')
。
您的 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
我有以下数据框:
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
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
如果有任何建议,我将不胜感激。
您也可以使用 df.apply
执行此操作:df['ssn'] = df['ssn'].apply(lambda a: a if len(str(a))==5 else '')
。
您的 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