首页 > 其他分享 >datframe格式 填充apply 报错incompatible index of inserted column with frame index

datframe格式 填充apply 报错incompatible index of inserted column with frame index

时间:2024-10-14 23:11:30浏览次数:7  
标签:index incompatible df transform DataFrame 索引 报错 apply

源代码

import pandas as pd
df = pd.read_csv("Titanic.csv")
# 对Sex分组,用各组乘客的平均年龄填充各组中的缺失年龄
df_cleaned['Age'] = df_cleaned.groupby('Sex')['Age'].apply(lambda x: x.fillna(x.mean()))

报错信息
incompatible index of inserted column with frame index

问题原因
在Pandas DataFrame中设置一个新列时,新列的索引与DataFrame的索引不匹配导致的

解决办法

df_cleaned['Age'] = df_cleaned.groupby('Sex')['Age'].apply(lambda x: x.fillna(x.mean()))

拓展:

apply方法

apply方法用于将一个函数应用到DataFrame或Series的每一行或每一列上。它非常灵活,几乎可以执行任何自定义操作。
用法示例:

  • 对DataFrame的每一列应用一个函数:
df.apply(lambda x: some_function(x))
  • 对DataFrame的每一行应用一个函数:
df.apply(lambda x: some_function(x), axis=1)

特点:

  • apply可以返回标量值、Series或DataFrame,这取决于传入的函数。
  • apply不保证返回的对象与原始对象具有相同的索引结构。
  • apply的灵活性使其成为执行复杂自定义操作的常用方法。

transform方法

transform方法用于对DataFrame或Series中的每个元素应用一个函数,但它有一些限制,即返回的对象必须与原始对象具有相同的形状。
用法示例:

  • 对DataFrame的每一列应用一个函数,并保持索引不变:
df.transform(lambda x: some_function(x))

特点:

  • transform返回的对象必须与原始对象具有相同的形状。例如,如果对DataFrame的列应用transform,则返回的必须是具有相同索引和列数的DataFrame。
  • transform通常用于执行能够广播到整个列或行的操作,如标准化、归一化或任何保持原始索引结构的数学变换。
  • transformapply更高效,因为它设计用于保持索引结构,不需要进行额外的索引对齐操作。

比较applytransform

以下是一些比较applytransform的关键点:

  • 索引保持transform保证返回相同形状的对象,而apply可能不保证。
  • 灵活性apply更加灵活,可以执行更复杂的操作,而transform则限制在能够广播的操作上。
  • 性能:当处理大型数据集时,transform通常比apply更高效,因为它不需要处理索引对齐问题。

选择哪个方法?

  • 如果你需要对DataFrame或Series进行复杂的自定义操作,并且返回的对象可能与原始对象形状不同,那么应该使用apply
  • 如果你需要进行简单的数学运算或数据转换,并且需要保证返回的对象与原始对象形状相同,那么应该使用transform
    在实际使用中,选择哪个方法取决于你的具体需求和场景。

标签:index,incompatible,df,transform,DataFrame,索引,报错,apply
From: https://www.cnblogs.com/bmy-share/p/18466406

相关文章

  • 解决 Maven 插件报错:The plugin org.codehaus.mojo:flatten-maven-plugin:1.5.0 requi
    检查Maven版本:首先,确认当前使用的Maven版本是否与插件要求的版本一致。可以通过在命令行中输入 mvn-v 来查看当前Maven的版本信息。升级或降级Maven版本:如果当前Maven版本过低,需要升级到插件要求的版本;如果过高,可能需要降级。升级或降级Maven可以参考Maven的官......
  • node打包报错:ERROR in xxxx.js Module not found: Error: Can’t resolve xxxx in ‘
    原文链接:node打包报错:ERRORinxxxx.jsModulenotfound:Error:Can’tresolvexxxxin‘xxx’errorCommandfailedwithexitcode1.–每天进步一点点(longkui.site) 0.背景anguar项目。分为主包和子包,子包推送到npm私有仓库中,然后主包在packjson中引入子包的版本......
  • git报错:unsafe repository(‘D/xxx/xxx/xx’) To add an exception for this director
    原文链接:git报错:unsaferepository(‘D/xxx/xxx/xx’)Toaddanexceptionforthisdirectory…–每天进步一点点(longkui.site)0.背景电脑重装系统以后,IDEA重新跑起来,然后git拉代码,报错:unsaferepository(‘D/xxx/xxx/xx’)Toaddanexceptionforthisdirectory,call......
  • javaweb实现下载功能报错sockettimeout
    javaweb压缩zip包下载,并响应头里面指定文件大小在JavaWeb应用程序中,如果你想要创建一个ZIP文件并通过HTTP响应提供下载,并且希望在响应头中指定文件大小,你可以先将文件写入到一个临时的ByteArrayOutputStream中,这样你就可以计算出压缩后的文件大小。然后,你可以将这个字节......
  • problemmatcher 引用无效: $esbuild-watch vscode插件报错
    vscode插件esbuild类型提示报错最近在上手开发vscode插件,demo阶段就遇到了一个小问题。搜索引擎没有特别好的回答,记录一下,以供查漏补缺。vscode插件开发做为一统前端的开发插件,vscode+其丰富的插件能力,共同构建了欣欣向荣的vscode插件。在团队效率方面,也是不可或缺的利器......
  • Windows11下安装wsl报错:无法解析服务器的名称或地址
    问题描述之前在自己的笔记本电脑(Windows10)上下载安装WSL很顺利,具体教程见前面的文章,但是在新电脑(Windows11)上下载就报错:无法解析服务器的名称或地址,按照网上说的两个解决方案:修改 DNS 为手动114.114.114.114;查询 raw.githubusercontent.com 这个域名对应的能ping通的ip,......
  • mysql8: 主从复制从库报错时,找到主库上的sql
    一,从库机器上:从库mysql日志中的报错信息给出了日志文件名和end_log_pos2024-10-12T09:41:23.761203Z414[ERROR][MY-013146][Repl]ReplicaSQLforchannel'':Worker1failedexecutingtransaction'ANONYMOUS'atsourcelogmysql-master-bin.000002,end_log_pos......
  • SQL注入练习-联合注入-报错注入-布尔盲注
    一判断是数字型注入还是字符型注入在不依赖于DVWA后端数据库的情况,如何通过前端验证的方法判断DVWA中的注入点是数字型注入还是字符型注入?(提示:用假设法进行逻辑判断)输入1and1=1查询有两种情况:①数字型注入a.输入内容没有被网站做任何处理,能查询到;b.输入内容被网站做......
  • centos7报错信息
    CentOS报错:Couldnotretrievemirrorlisthttp://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stock32errorwas14:curl#6-"Couldnotresolvehost:mirrorlist.centos.org;1、检查网络配置是否正常在linux下ping一下看看是不是网络链接正常。出现这种......
  • Python包导入报错:ValueError: attempted relative import beyond top-level package
    Python包导入报错:ValueError:attemptedrelativeimportbeyondtop-levelpackage前置知识:python-m命令python-m命令用于以模块的方式运行Python代码,而不是直接执行脚本文件。它为执行Python代码提供了一种更加灵活和标准化的方式,特别适用于包和模块。python-m的工作原......