Как изменить значение элементов int в серии - PullRequest
0 голосов
/ 04 июня 2018

Я хочу изменить только 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 ]

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

Вы можете получить в подсерии, сопоставив 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
0 голосов
/ 04 июня 2018

to_numeric с fillna

(pd.to_numeric(df, errors='coerce')**2).fillna(df)

tom     10000
bob     bulya
cat     90000
foot     asya
dtype: object
0 голосов
/ 04 июня 2018

Вы можете использовать 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
...