Вы можете маскировать числовые значения, используя to_numeric
:
df['C'] = df['C'].mask(pd.to_numeric(df['C'], errors='coerce').notna())
df
A B C
0 test foo xyz
1 hit bar NaN
2 hit fish NaN
3 hit NaN abc
4 test val NaN
5 test val NaN
to_numeric
- наиболее общее решение, которое должно работать независимо от того, есть ли у вас столбец строк или смешанных объектов.
Если это столбец строк, и вы пытаетесь сохранить только строки букв, str.isalpha
может быть достаточно:
df['C'] = df['C'].where(df['C'].str.isalpha())
df
A B C
0 test foo xyz
1 hit bar NaN
2 hit fish NaN
3 hit NaN abc
4 test val NaN
5 test val NaN
Хотя это специально сохраняет строкикоторые не имеют цифр.
Если у вас есть столбец со смешанными объектами, вот еще одно решение, использующее str.match
(на самом деле любой метод str с флагом na
) с na=False
:
df['C'] = ['xyz', 10, 90, 'abc', 20, 90]
df['C'] = df['C'].where(df['C'].str.match(r'\D+$', na=False))
df
A B C
0 test foo xyz
1 hit bar NaN
2 hit fish NaN
3 hit NaN abc
4 test val NaN
5 test val NaN