Как изменить значение элементов int в серии
Я хочу только изменить int
элементы в этой серии. Я хочу напечатать str
значения неизменны и выведите квадратные значения всех int
элементы. Почему это не работает?
ser3=pd.Series([100,'bulya',300,'asya'], ['tom','bob','cat','foot'])
print(ser3)
for i in ser3.iloc[[]]:
if type(ser3.iloc[i]) == str:
print (ser3.iloc[[i]])
else:
print (ser3.iloc[[i]]**2)
3 ответа
to_numeric
с fillna
(pd.to_numeric(df, errors='coerce')**2).fillna(df)
tom 10000
bob bulya
cat 90000
foot asya
dtype: object
Вы можете получить в подсерии, составив карту type
и тестирование равенства с int
, Тогда фильтр и квадрат.
ser3.loc[ser3.map(type) == int] ** 2
tom 10000
cat 90000
dtype: object
Затем вы можете обновить серию с update
метод.
ser3.update(ser3.loc[ser3.map(type) == int] ** 2)
ser3
tom 10000
bob bulya
cat 90000
foot asya
dtype: object
Ты можешь использовать 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