我是python和pandas的新手,我正在尝试执行以下操作:
这是我的数据集:
df5
Out[52]:
NAME
0 JIMMcdonald
1 TomDickson
2 SamHarper
我正在尝试使用lambda apply提取前三个字符
这是我尝试过的:
df5["FirstName"] = df5.apply(lambda x: x[0:3],axis=1)
结果如下:
df5
Out[54]:
NAME FirstName
0 JIMMcdonald JIMMcdonald
1 TomDickson TomDickson
2 SamHarper SamHarper
我不明白为什么它不起作用..有人可以帮助我吗?
谢谢
答案 0 :(得分:1)
这是由于DataFrame.apply
(您正在使用的)和Series.apply
(您要使用的)之间的差异。解决此问题的最简单方法是从数据框中选择所需的序列,然后在其上使用.apply
:
df5["FirstName"] = df5["NAME"].apply(lambda x: x[0:3],axis=1)
您当前的代码在每列上运行一次应用功能 ,在这种情况下,它将选择前三行。该固定代码在所选列中的每个值上运行该函数。
更好的是,正如@Erfan在他的评论中指出的那样,通常可以使用panda的.str
来简化像这样的简单单线字符串操作,该操作使您可以在许多您对单个字符串进行操作的方式相同:
df5["FirstName"] = df5["NAME"].str[:3]