程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

除了数据帧中的 lambda 函数外,作为尝试工作的函数

发布于2022-10-06 22:13     阅读(476)     评论(0)     点赞(17)     收藏(2)


我正在尝试清理数据框的列,因此只剩下名字。

我目前正在尝试将列的每个值拆分为一个列表,然后收集列表的 [0],如果元素包含逗号,则获取 [1]。

我尝试了下面的代码,它运行良好,除了一些异常值,只有姓氏和逗号,但没有名字,如下例所示:

我用了什么:

msgDFt['From Name'] = msgDFt['From Name'].str.split(' ')
msgDFt['From Name'] = msgDFt['From Name'].apply(lambda row: row[0] if ',' not in row[0] else row[1])

现在我知道 lambda 函数没有 try-except 的功能,接下来我尝试的是一个函数:

def firstNameMod(name):
    for n in name:
        if n[0] == None:
            name = 'NOT FOUND'
        elif ',' in n[0]:
            name = name[1]
        elif ',' in n[0] and n[1] == None:
            name = name[0]
        elif n[0] != False:
            name = name[0]
        
df.apply(firstNameMod(df['Name']))

这不起作用,因为我选择的列被读取为 NoneType。

我有的:

    Name
0   Robert Marin
1   Katherine Ortiz
2   Sloth, Herbert
3   Perez,

我想要的是:

    Name
0   Robert
1   Katherine
2   Herbert
3   NaN

示例数据框:

names = {'Name': ['Robert Marin','Katherine Ortiz', 'Sloth, Herbert','Perez,']}
df = pd.DataFrame(names)

解决方案


您可以使用正则表达式来提取您的名字:

df['Name'].str.extract('(^\w+(?=[^,]*$)|(?<=, )\w+)')[0]

输出:

0       Robert
1    Katherine
2      Herbert
3          NaN


所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/1793552/e68ebb7dc2bebd1499b3/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

17 0
收藏该文
已收藏

评论内容:(最多支持255个字符)