如何对序列应用函数

2024-06-18 13:03:41 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一系列s

                  Name
0     Tennessee Oilers
1     Tennessee Titans
2  Washington Redskins

我想要一个应用函数来重命名值。在

^{pr2}$

这引发了:

TypeError: ("'Series' objects are mutable, thus they cannot be hashed", u'occurred at index 0')

如果我把这个应用到DataFrame的列上,这个方法就可以工作了。在

我以为我是按照docs做的,你能纠正我吗?在


Tags: 函数nameobjectsare重命名seriesmutabletypeerror
1条回答
网友
1楼 · 发布于 2024-06-18 13:03:41

使用^{}执行查找:

In [204]:
translate = {
    'Houston Oilers': 'Tennessee Titans',
    'Tennessee Oilers': 'Tennessee Titans'
}
s.map(translate)

Out[204]:
0    Tennessee Titans
1                 NaN
2                 NaN
Name: Name, dtype: object

s = s.apply(lambda x: translate.get(x, x))失败的原因是这里的lambda是一个panda Series,并且不能将其用作给定错误原因的键查找值,因为它不能散列dict键必须是哪个。在

编辑

事实上我不能重现你的错误:

^{pr2}$

上面的方法很好

编辑1

要保留不存在的值,可以调用^{}^{}

In [219]:
s.update(s.map(translate).dropna())
s

Out[219]:
0       Tennessee Titans
1       Tennessee Titans
2    Washington Redskins
Name: Name, dtype: object

当您使用read_csv读取csv时,它返回一个df,即使它只有一个列,如果您想要一个序列,那么传递param squeeze=True

In [223]:
t="""Name
Tennessee Oilers
Tennessee Titans
Washington Redskins"""
type(pd.read_csv(io.StringIO(t), squeeze=True))

Out[223]:
pandas.core.series.Series

编辑2

发生错误是因为您对单列df调用了apply:

pd.DataFrame(s).apply(lambda x: translate.get(x, x))

因此,这与apply迭代每个可以散列的值的序列不同,但是这里它传递的是不能散列的整个Series,如果你这样做的话,它就可以工作了:

In [227]:
pd.DataFrame(s).apply(lambda x: translate.get(x['Name'], x['Name']), axis=1)

Out[227]:
0       Tennessee Titans
1       Tennessee Titans
2    Washington Redskins
dtype: object

传递axis=1执行按行的值传递

相关问题 更多 >