【发布时间】: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