【问题标题】:Apply method for pandaspandas的申请方法
【发布时间】:2020-09-06 16:29:50
【问题描述】:

我在使用 apply 方法时遇到问题。所以,我正在尝试将系列的第一个和最后一个字母大写。首先我做了一个简单的系列,即

s1 = pd.Series(['pandas','python','javascript','c#'])
s1

输出:

0        pandas
1        python
2    javascript
3            c#
dtype: object

当我创建一个简单的函数并运行它时。它运行良好,没有任何问题,并为我提供了我希望的输出。

def upp(x):
for i in x:
    print(f'{i[0].upper()}{i[1:-1].lower()}{i[-1].upper()}')

upp(s1)

输出:

PandaS
PythoN
JavascripT
C#

但是,输出不是系列类型,因为我希望它做进一步的分析。我运行了一个类型方法来检查类型。

type(upp(s1))

输出:

NoneType

所以,我猜我必须使用 apply 方法来获取系列数据类型。但是,当我使用该函数运行 apply 方法时。结果不是我所希望的。

def upp(x):
for i in x:
    print(f'{i[0].upper()}{i[1:-1].lower()}{i[-1].upper()}')
s1.apply(upp)

输出:

PP
HH
PP
PP
YY
TT
HH
OO
NN
JJ
AA
VV
AA
CC
##
0    None
1    None
2    None
3    None
dtype: object

谁能向我解释发生了什么以及我在哪里做错了,并提供有关如何使用和不使用 apply 方法的更多信息?我是初学者,练习一些问题。理解这个概念会有很大帮助。

【问题讨论】:

  • 你的函数只是打印'{i[0].upper()}{i[1:-1].lower()}{i[-1].upper()}'的结果,并没有返回任何东西。这就是为什么你的输出类型是NoneType。您应该另外使用return 或代替print(...)
  • 当在Series 上使用.apply 时,使用的函数一次接收一个系列元素,因此upp 中的for 循环现在遍历每个元素的单个字符系列中的价值,而不是系列的元素本身。
  • 仅供参考:当有人回答您的问题时,如果回答有帮助,请“接受”。 (单击答案旁边的复选标记将其从灰色切换为已填充)What should I do when someone answers my question?
  • 我不知道,我们可以这样做

标签: python pandas function apply


【解决方案1】:

您的函数打印结果而不是使用return 返回它。此外,for 循环在您的函数中是额外的,因为 .apply 方法一次将函数应用于一项。

您可以将您的功能更改为:

def upp(x):
    return f'{x[0].upper()}{x[1:-1].lower()}{x[-1].upper()}'

s1.apply(upp)

或者,您可以简单地使用 lambda 函数:

s1.apply(lambda x: f'{x[0].upper()}{x[1:-1].lower()}{x[-1].upper()}')

【讨论】:

  • 谢谢.. 我终于明白了。我想传递一个系列的所有值,我们需要使用一个循环,然后只有我们才能传递它们。没有人告诉我,或者我想我错过了,当我们将一个系列传递给一个函数时,它适用于每个元素。
  • @Samrat Thapa:顺便说一句,与使用for 循环在DataFrame 上进行粗循环相比,使用.apply 方法循环要快得多。 (搜索“矢量化”了解更多信息)
【解决方案2】:

你快到了。以下答案可能会有所帮助:

import pandas as pd


s1 = pd.Series(['pandas','python','javascript','c#'])


def upp(x):
    return f'{x[0].upper()}{x[1:-1].lower()}{x[-1].upper()}'

s1 = s1.apply(upp)

print(s1)

输出:

0        PandaS
1        PythoN
2    JavascripT
3            C#
dtype: object

您不需要在upp() 中使用循环。

【讨论】:

    猜你喜欢
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 2021-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    相关资源
    最近更新 更多