Python заменяет строку на пустую, если длина не равна x - PullRequest
3 голосов
/ 14 мая 2019

У меня есть следующий фрейм данных:

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 заменить строку, если длина меньше 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 ]

1 голос
/ 15 мая 2019

Ваш столбец 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      
1 голос
/ 15 мая 2019

Вы можете сделать это также с помощью df.apply: df['ssn'] = df['ssn'].apply(lambda a: a if len(str(a))==5 else '').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...