Вы можете использовать pd.Series.apply
с пользовательской функцией.
ser3 = pd.Series([100,'bulya',300,'asya'], ['tom','bob','cat','foot'])
res = ser3.apply(lambda x: x**2 if isinstance(x, int) else x)
print(res)
tom 10000
bob bulya
cat 90000
foot asya
dtype: object
Однако, на мой взгляд, это неправильное использование Панд.Я рекомендую вам реструктурировать ваши данные так, чтобы числовые данные содержались в числовом ряду.После этого вы сможете выполнять операции в векторизованном виде.
Например, чтобы извлечь только квадраты чисел, вы можете использовать pd.to_numeric
с последующим dropna
:
res = pd.to_numeric(ser3, errors='coerce').dropna()**2
print(res)
tom 10000.0
cat 90000.0
dtype: float64