如果包含一个空格,Pandas 将名称列拆分为名字和姓氏

2024-01-12

假设我有一个 pandas DataFrame,其中包含如下名称:

name_df = pd.DataFrame({'name':['Jack Fine','Kim Q. Danger','Jane Smith', 'Juan de la Cruz']})

    name
0   Jack Fine
1   Kim Q. Danger
2   Jane Smith
3   Juan de la Cruz

我想分开name列入first_name and last_name如果名称中有一个空格。否则我想将全名推入first_name.

所以最终的 DataFrame 应该是这样的:

  first_name     last_name
0 Jack           Fine
1 Kim Q. Danger
2 Jane           Smith
3 Juan de la Cruz

我尝试通过首先应用以下函数来返回可以分为名字和姓氏的名称来实现此目的:

def validate_single_space_name(name: str) -> str:
    pattern = re.compile(r'^.*( ){1}.*$')
    match_obj = re.match(pattern, name)
    if match_obj:
        return name
    else:
        return None

然而,将此函数应用于我的原始 name_df 会导致一个空的 DataFrame,而不是由可拆分的名称和 None 填充的 DataFrame。

帮助我实现当前的工作方法,或者涉及不同方法的解决方案将不胜感激!


您可以使用str.split分割字符串,然后使用测试分割数str.len并将其用作布尔掩码来仅分配具有拆分的最后一个组件的那些行:

In [33]:
df.loc[df['name'].str.split().str.len() == 2, 'last name'] = df['name'].str.split().str[-1]
df

Out[33]:
              name last name
0        Jack Fine      Fine
1    Kim Q. Danger       NaN
2       Jane Smith     Smith
3  Juan de la Cruz       NaN

EDIT

您可以致电split带参数expand=True这只会填充名称长度恰​​好为 2 个名称的情况:

In [16]:
name_df[['first_name','last_name']] = name_df['name'].loc[name_df['name'].str.split().str.len() == 2].str.split(expand=True)
name_df

Out[16]:
              name first_name last_name
0        Jack Fine       Jack      Fine
1    Kim Q. Danger        NaN       NaN
2       Jane Smith       Jane     Smith
3  Juan de la Cruz        NaN       NaN

然后,您可以使用以下命令替换丢失的名字fillna:

In [17]:
name_df['first_name'].fillna(name_df['name'],inplace=True)
name_df
​
Out[17]:
              name       first_name last_name
0        Jack Fine             Jack      Fine
1    Kim Q. Danger    Kim Q. Danger       NaN
2       Jane Smith             Jane     Smith
3  Juan de la Cruz  Juan de la Cruz       NaN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果包含一个空格,Pandas 将名称列拆分为名字和姓氏 的相关文章

随机推荐

  • 在jpanel上画线

    我想让它像画一把尺子 带有 90 度角刻度线的线 https stackoverflow com questions 3488419 java draw a ruler line with tick marks at 90 degree a
  • 类的 Python repr

    As the Python 2 文档 repr http docs python org 2 reference datamodel html object repr 状态 如果可能的话 这个 即 repr 应该看起来像一个有效的 Pyth
  • 将数据拆分为 3 列数据框

    我在将数据文件解析为数据帧时遇到问题 当我使用 pandas 读取数据时 我得到一个包含所有信息的一列数据框 Server 7 14 182 917 20 Dec 2018 08 30 21 0500 GET tools performan
  • 在线 Internet Explorer 模拟器 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 试图找到类似的问题 重复的问题 失败 我在mac上开发 我爱我的麦克 我使用 Chrome Firefox 和 Safari 进行开发 我
  • ajax请求中变量丢失

    当尝试将变量作为参数传递给嵌套的 ajax 请求回调时 我遇到了奇怪的行为 form on submit function e ajaxSetup header meta name token attr content e preventD
  • chrome.tab.onactivated

    有人可以告诉我如何使用chrome tabs onActivated 如果 url 等于 我想刷新单击 激活的选项卡 www example com http www example com 或者 如果这是错误的方法 请告诉我该使用什么 首
  • 首次通过 URL 方案打开时 iOS 应用程序崩溃

    我的应用程序处理 URL 方案 当它已经运行并从另一个应用程序调用时 它的行为正确并且没有问题 但是 当它完全关闭时 如在非后台模式下 并且另一个应用程序调用它 它会立即崩溃 我已经设置了 等待可执行文件启动 选项 以便我可以调试appli
  • ES6模块是同步加载还是异步加载?

    模块加载器负责加载模块 我所知道的是 模块加载器在浏览器中异步加载模块 而在 Node js 中它是同步加载的 我想确认一下这个信息是否正确 ES6 模块加载器将是异步的 而 Node js 模块加载器则不是 以下是模块加载器的一些关键方面
  • 从 html 访问 $scope?

    由于愚蠢的第三方原因 我需要从html访问 scope 这就是我正在尝试的 Because angular是全局暴露的 你可以使用 var scope angular element scope 例如 如果您的标记中有此内容 div div
  • 我想在页面过期(419)显示时重定向到登录页面

    我在 handler php 中添加了这段代码 if exception instanceof Illuminate Session TokenMismatchException return redirect gt route login
  • 根据背景颜色改变汉堡菜单的颜色

    有一个白色的汉堡菜单 问题是 在我的项目中 由于背景不透明 网站的某些地方不可见 任务是编写一个脚本 该脚本应根据背景颜色将颜色更改为对比色 例如 在下面的代码中 在黑色背景上 菜单应变为白色 最初的计划是为每个块分配不同的ID 当菜单图标
  • 如何将 Apache 日志重定向到 STDOUT 和 Apache 日志文件

    我正在运行一个 docker 容器 想要将 apache 服务器的日志写入 STDOUT 和文件 知道我的 Apache httpd conf 文件需要什么样的配置吗 任何帮助将不胜感激 你可以试试这个 CustomLog usr bin
  • 如何将字符串写入远程服务器(linux)中的文件

    我试图构建一个小代码 在其中创建一些字符串并将该字符串传输到位于远程服务器中的文件 应在运行时创建 就我而言 远程服务器是 Linux 有人可以帮我吗 我正在使用 JSCH 和 ChannelSftp 但无法执行此操作 下面是我的代码 JS
  • Mono:堆部分太多当应用程序占用内存超过 4 GB 时,增加 MAXHINCR 或 MAX_HEAP_SECTS

    我正在具有 8 GB 内存的 bitnami linux 上运行我的单声道应用程序 它是一个复杂的文件合并应用程序 在运行时应该占用大量 RAM 但每次需要超过 4 GB 的 RAM 时 它都会崩溃并显示以下错误消息 Too many he
  • 底层连接在 HttpWebRequest POST 上关闭 在生产服务器上

    我收到 底层连接已关闭 连接意外关闭 尝试在生产服务器上使用 HttpWebRequest 类进行 POST 时出错 但在我的开发计算机上它工作正常 我最初尝试使用 WebClient 类 但我切换到 HttpWebRequest 来尝试研
  • 如何以分布式方式在本地启动drillbit?

    我下载了 Apache Drill v1 8 编辑了conf drill override conf进行以下更改 drill exec cluster id drillbits1 zk connect 10 178 23 140 2181
  • Ravendb - 自动生成自己的密钥

    我当前有一个对象 它有一个名为 Id 的公共属性 当我存储对象时 我希望 Id 成为数据的一部分 而不是像当前那样成为文档 Id 创建文档存储时 我仅设置连接字符串 using var session documentStore OpenS
  • 无法在 Intellij 中运行 Scala 文件

    我在 Intellij IDEA 14 4 社区版中建立了一个加特林项目 我安装了 Scala 插件 并且项目配置似乎是正确的 因为我没有看到内联错误并且编译工作正常 不过 我在一些教程中指出 您也可以通过右键单击当前文件并选择运行或调试来
  • 停止 ruby​​ http 请求修改标头名称

    我正在 ruby 中执行 http 请求 http Net HTTP new uri host uri port req Net HTTP Post new uri path req body payload req customehead
  • 如果包含一个空格,Pandas 将名称列拆分为名字和姓氏

    假设我有一个 pandas DataFrame 其中包含如下名称 name df pd DataFrame name Jack Fine Kim Q Danger Jane Smith Juan de la Cruz name 0 Jack