gpt4 book ai didi

python - 将 lambda 函数应用于列在 pandas 中失败

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:20 24 4
gpt4 key购买 nike

我不知道为什么 index 方法在执行按列应用功能时会出现不一致的行为。

数据框是:

df = pd.DataFrame( [(1, 'Hello'), (2, "World")])
df.columns=['A', 'B']

我想将 lambda 应用于第二列,它说无法应用 Series 对象?

print df.iloc[:, 1:2].apply(lambda x: x.upper()).head()
**AttributeError**:("'Series' object has no attribute 'upper'", u'occurred at index B')
print df.loc[:, ['B']].apply(lambda x: x.upper()).head()
**AttributeError**:("'Series' object has no attribute 'upper'", u'occurred at index B')

但是下面的索引方法效果很好。

print df.loc[:, 'B'].apply(lambda x: x.upper()).head()

为什么?我认为这三种索引方法是等价的?以上三种索引方式打印出来的结果几乎一样即:

   B
0 Hello
1 World

并打印 df.loc[:, 'B'] 得到

0  Hello
1 World
Name: B, dtype: object

区别是什么意思?

最佳答案

当您使用 'B' 进行索引时,您会得到一个系列。当您使用 1:2['B'] 进行索引时,您会得到一个包含一列的 DataFrame。当您在一个系列上使用 apply 时,您的函数会在每个元素上被调用。当您在 DataFrame 上使用 apply 时,您的函数会在每个上被调用。

所以不,它们不等同。当你有一个系列时,你可以随心所欲地使用你的功能。当你有一个单列的 DataFrame 时,你不能,因为它作为参数传递给列,而该列是一个没有 upper 方法的 Series。

你可以看到它们是不一样的,因为打印出来的结果是不一样的。是的,它们几乎相同,但又不相同。第一个有列标题,表明它是一个 DataFrame;第二个没有列标题,但底部有“名称”,表明它是一个系列。

关于python - 将 lambda 函数应用于列在 pandas 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19782586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com