首页电脑使用pandas DataFrame提取列数据并去重 pandas dataframe格式长什么样

pandas DataFrame提取列数据并去重 pandas dataframe格式长什么样

圆圆2025-08-16 16:01:22次浏览条评论

Pandas DataFrame 子框赋值:理解与规避自动对齐陷阱在 Pandas DataFrame 中将一个子框赋值给另一个子框时,Pandas 会根据索引和列标签自动填充数据。当左右的标签不匹配时,这可能导致意外的 NaN 值。为确保数据正确定位,而不是标签对齐的影响,核心解决方案直接将右边的 DataFrame 或 Series 转换为 NumPy 重新进行赋值操作。Pandas DataFrame子框赋值的自动对齐

pandas在进行数据框操作赋值时,尤其是涉及机制到子框(子帧)赋值时,其内部会尝试根据索引(索引)和列名(列标签)进行智能的数据对齐。这意味着,如果分配操作的右侧和数据结构具有不同的索引或列名,pandas会尝试将它们对齐,只有标签匹配的单元格才会进行赋值。对于不匹配的标签,如果右边没有对应数据,左边对应的位置可能会被填充nan(不是数字)。

考虑以下示例,我们尝试将 df2 的部分数据赋值给 df1 的区域特定:import pandas as pddf1 = pd.DataFrame({'1':, '2':,'3': })df2 = pd.DataFrame({'1':, '2':, '3':})# 尝试将 df2 的前两行、列 '1' 和 '2' 赋值给 df1 的前两行、列 '2' 和 '3' df1.loc,['2','3']] = df2.loc,['1','2']]print(quot;赋值后的df1:quot;)print(df1)登录后复制

执行上述代码后,df1的输出如下:赋值后的df1: 1 2 30 1.0 22.0 NaN1 2.0 22.0 NaN2 3.0 30.0 300.03 4.0 40.0 400.04 5.0 50.0 500.05 6.0 60.0 600.0登录后复制

在这里,df1.loc,['2','3']]定义了一个目标区域,它包含列'2'和'3'。而右边的df2.loc,行、'3'列被填充了NaN。解决方案:为NumPy存储

要解决这个问题,即强制Pandas 进行基于位置(除标签)的赋值,最直接有效的方法将 DataFrame 或 Series 转换为 NumPy 数据库(numpy.ndarray)。NumPy 数据库是纯粹的数值或通用数据结构,不包含 Pandas 的索引或列名信息。当 Pandas 接收到一个 NumPy 数据库进行赋值时,它会按照形状匹配的原则,直接将数据库元素按位置填充到区域目标,而不进行标签配置。

import pandas as pdimport numpy as np # 导入 numpy 库df1 = pd.DataFrame({'1':, '2':,'3': })df2 = pd.DataFrame({'1':, '2':, '3':})# 将右侧的 df2 子框为 NumPy 数据库df1.loc, ['2','3']] = df2.loc, ['1','2']].to_numpy()print(quot;修改赋值后的 df1:quot;)print(df1)登录后复制

执行上述代码后,df1 的后输出将符合预期:修改赋值后的 df1: 1 2 30 1 22 221 2 22 222 3 30 3003 4 40 4004 5 50 5005 6 60 600登录后复制

这里,df2.loc, ['1','2']].to_numpy() 会生成一个 (2, 2) 形状的 NumPy 队列,其中包含 df2 在指定位置上的值。由于 NumPy 数据库未填写列名信息,Pandas 在描述符时会简单配置这个 (2, 2) 的队列按位置填充到df1.loc, ['2','3']] 所定义的 (2, 2) 区域内。具体来说,NumPy 数据库的第一列(上面 df2 的 '1' 列数据)被赋值给 df1 目标区域的第一列(即 df1 的 '2' 列),而 NumPy 数据库的第二列(上面 df2 的 '2' 列数据)被赋值给df1 目标区域的第二列(即 df1 的 '3' )。注意事项与最佳实践形状匹配:使用 .to_numpy() 进行赋值时,最关键的一点是保证右侧 NumPy 阵列列的形状(形状)与右侧目标区域的形状完全匹配。如果形状不匹配,Pandas 会报错 ValueError 或其他形状不匹配的错误。例如,df1.loc,['2','3']]定义了一个 2 行 2 列的区域,因此右侧的 NumPy数据库类型也是 2 行 2 列。数据类型:将 DataFrame 转换为 NumPy 数据库类型时,如果 DataFrame 包含数据类型,NumPy 可能会尝试寻找一个兼容所有元素的通用数据类型。可能会导致多种数据类型转换(例如,整数和浮点数混合时转换为浮点数,字符串和数字混合时转换为对象类型)。在转换回 DataFrame 时,Pandas 会尝试保留或导出最佳数据类型。何时使用.to_numpy():当你明确知道源数据和目标区域的物理对应位置关系,且不希望 Pandas 进行标签对齐时。当你需要将一个 DataFrame 或 Series 的值严格按照其在内存中的顺序赋值到另一个位置,而不关心其原始标签时。何时不使用 .to_numpy():当你希望利用 Pandas 强大的标签能够来确保数据正确匹配时(例如,在合并、连接或基于标签的复杂更新操作中)。在这种情况下,如果标签不匹配,你可能希望得到 NaN 或其他明确的提示,而不是静默地按位置覆盖。

当你处理的数据量非常大,并且性能不是达到极限时,Pandas 的标签对

以上就是Pandas DataFrame 子赋值框:理解与规避自动姿势陷阱的详细内容,更多请关注乐哥常识网相关文章!

Pandas Dat
VSCode如何集成RabbitMQ管理工具 VSCode消息队列插件的使用指南
相关内容
发表评论

游客 回复需填写必要信息