为 pandas 应用方法
Apply method for pandas
我在使用 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 方法来获取系列数据类型。但是,当我 运行 将方法与函数一起应用时。结果不是我所希望的。
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 方法的更多信息吗?我是初学者,正在练习一些问题。对理解这个概念会有很大的帮助。
您的函数打印结果而不是使用 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()}')
你快到了。以下答案可能有所帮助:
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()
中使用循环。
我在使用 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 方法来获取系列数据类型。但是,当我 运行 将方法与函数一起应用时。结果不是我所希望的。
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 方法的更多信息吗?我是初学者,正在练习一些问题。对理解这个概念会有很大的帮助。
您的函数打印结果而不是使用 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()}')
你快到了。以下答案可能有所帮助:
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()
中使用循环。