0

0

基于ID列从含NaN值的DataFrame构建不同DataFrame

聖光之護

聖光之護

发布时间:2025-08-06 17:38:01

|

752人浏览过

|

来源于php中文网

原创

基于id列从含nan值的dataframe构建不同dataframe

本文旨在指导读者如何根据DataFrame中特定列(如'a'列)的非缺失值生成ID,并基于此ID将原始DataFrame拆分为多个仅包含特定列且剔除缺失值的新的DataFrame。通过示例代码,详细展示了如何利用cumsum()和dropna()方法高效地实现这一目标,并提供了重置索引的建议,以便更好地管理生成的数据。

在数据分析和处理过程中,经常会遇到需要根据某些规则将一个DataFrame拆分成多个子DataFrame的情况。当DataFrame中存在缺失值(NaN)时,拆分过程可能会变得更加复杂。本文将介绍一种基于特定列的非缺失值生成ID,并根据该ID将DataFrame拆分为多个子DataFrame的方法。

步骤详解

  1. 导入必要的库

    首先,确保你已经安装了 pandas 库。如果没有,可以使用 pip install pandas 命令进行安装。然后在 Python 脚本中导入 pandas:

    import pandas as pd
    import numpy as np  # 导入 numpy 用于创建 NaN 值
  2. 创建示例DataFrame

    为了演示,我们创建一个包含 NaN 值的 DataFrame:

    df = pd.DataFrame({'a':[10, np.nan, np.nan, 22, np.nan],
                       'b':[23, 12, 7, 4, np.nan],
                       'c':[13, np.nan, np.nan, np.nan, 65]})
    
    print(df)

    输出:

         a     b     c
    0  10.0  23.0  13.0
    1   NaN  12.0   NaN
    2   NaN   7.0   NaN
    3  22.0   4.0   NaN
    4   NaN   NaN  65.0
  3. 生成ID列

    关键在于根据 a 列的非 NaN 值来生成 id 列。使用 notna() 方法判断 a 列中的值是否为非 NaN,然后使用 cumsum() 方法计算累计和。这样,每个非 NaN 值都将作为一个新的 ID 的起始点。

    聚蜂消防BeesFPD
    聚蜂消防BeesFPD

    关注消防领域的智慧云平台

    下载
    df['id'] = df['a'].notna().cumsum()
    print(df)

    输出:

         a     b     c  id
    0  10.0  23.0  13.0   1
    1   NaN  12.0   NaN   1
    2   NaN   7.0   NaN   1
    3  22.0   4.0   NaN   2
    4   NaN   NaN  65.0   2
  4. 创建子DataFrame

    现在,我们可以根据 id 列和需要的列创建子 DataFrame。使用 [['id', 'column_name']] 选择需要的列,然后使用 dropna() 方法删除包含 NaN 值的行。

    df_a = df[['id','a']].dropna()
    df_b = df[['id','b']].dropna()
    df_c = df[['id','c']].dropna()
    
    print("df_a:\n", df_a)
    print("df_b:\n", df_b)
    print("df_c:\n", df_c)

    输出:

    df_a:
        id     a
    0   1  10.0
    3   2  22.0
    df_b:
        id     b
    0   1  23.0
    1   1  12.0
    2   1   7.0
    3   2   4.0
    df_c:
        id     c
    0   1  13.0
    4   2  65.0
  5. 重置索引(可选)

    如果需要重置子 DataFrame 的索引,可以使用 reset_index(drop=True) 方法。drop=True 参数表示删除原来的索引列。

    df_a = df[['id','a']].dropna().reset_index(drop=True)
    print("df_a with reset index:\n", df_a)

    输出:

    df_a with reset index:
        id     a
    0   1  10.0
    1   2  22.0

完整代码示例

import pandas as pd
import numpy as np

# 创建示例 DataFrame
df = pd.DataFrame({'a':[10, np.nan, np.nan, 22, np.nan],
                   'b':[23, 12, 7, 4, np.nan],
                   'c':[13, np.nan, np.nan, np.nan, 65]})

# 生成 ID 列
df['id'] = df['a'].notna().cumsum()

# 创建子 DataFrame
df_a = df[['id','a']].dropna().reset_index(drop=True)
df_b = df[['id','b']].dropna().reset_index(drop=True)
df_c = df[['id','c']].dropna().reset_index(drop=True)

# 打印结果
print("df_a:\n", df_a)
print("df_b:\n", df_b)
print("df_c:\n", df_c)

注意事项

  • 确保用于生成ID的列(例如本例中的 a 列)包含足够的信息来区分不同的ID组。
  • dropna() 方法默认删除包含任何 NaN 值的行。如果只需要删除特定列中的 NaN 值,可以使用 subset 参数指定列名。例如:df.dropna(subset=['b'])。
  • 在处理大型 DataFrame 时,效率至关重要。pandas 提供了许多优化技巧,例如使用矢量化操作代替循环。

总结

本文介绍了如何根据 DataFrame 中特定列的非缺失值生成 ID,并基于该 ID 将 DataFrame 拆分为多个子 DataFrame。这种方法在数据清洗和预处理过程中非常有用,可以帮助你更好地组织和分析数据。通过合理运用 notna()、cumsum() 和 dropna() 等 pandas 方法,可以高效地完成这项任务。 记住,在实际应用中,需要根据具体情况调整代码,以满足不同的需求。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

753

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

636

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

758

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

618

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1262

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

707

2023.08.11

公务员递补名单公布时间 公务员递补要求
公务员递补名单公布时间 公务员递补要求

公务员递补名单公布时间不固定,通常在面试前,由招录单位(如国家知识产权局、海关等)发布,依据是原入围考生放弃资格,会按笔试成绩从高到低递补,递补考生需按公告要求限时确认并提交材料,及时参加面试/体检等后续环节。要求核心是按招录单位公告及时响应、提交材料(确认书、资格复审材料)并准时参加面试。

1

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 3.1万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号