Панды: заменить все строки в нижнем регистре в столбце с None - PullRequest
0 голосов
/ 01 июня 2018

У меня есть набор данных со столбцом под названием «имена», который включает строки, которые не являются именами.Все они написаны строчными буквами .

df = pd.DataFrame({'names': ['Chris Z', 'Hulk Hogan', 'notaname',
                             'whateven']})

Ожидаемый результат:

     names
0    Chris Z
1    Hulk Hogan
2    NaN
3    NaN
Name: names, dtype: object

Я хочу заменить их на NaN, и я попробовал это:

df['names'] = df['names'].replace(r'[a-z]{2}', None, inplace=True, regex=True)

Но это заменяет все записи в столбце, включая те, которые начинаются с заглавных букв.Можете ли вы посоветовать решение?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Без регулярного выражения вы можете сравнить серию со строчной версией самой себя:

df.loc[df['names'] == df['names'].str.lower(), 'names'] = np.nan

print(df['names'])

0       Chris Z
1    Hulk Hogan
2           NaN
3           NaN
Name: names, dtype: object
0 голосов
/ 01 июня 2018

Используйте mask с ^[a-z]+$ в качестве регулярного выражения:

df = pd.DataFrame({'names': ['Chris Z', 'Hulk Hogan', 'notaname', 'whateven']})

df.names.mask(df.names.str.match(r'^[a-z]+$'))

0       Chris Z
1    Hulk Hogan
2           NaN
3           NaN
Name: names, dtype: object

Если в некоторых строчных строках есть пробелы, просто используйте^[a-z\s]+$ вместо.

^            # Asserts position at beginning of string
[  
  a-z        # Matches any lowercase character 1 or more times
]+           
$            # Asserts position at end of string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...