如何更改系列中int元素的值

时间:2018-06-04 14:53:40

标签: python pandas conditional-statements series

我想只更改本系列中的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 :(得分:2)

您可以将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

答案 1 :(得分:2)

您可以通过映射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

答案 2 :(得分:2)

使用 to_numeric

fillna

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

tom     10000
bob     bulya
cat     90000
foot     asya
dtype: object