pandas dataframe统计填充空值方式

 更新时间:2024年02月22日 15:37:05   作者:bitcarmanlee  
这篇文章主要介绍了pandas dataframe统计填充空值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

1.判断dataframe是否有空值

def t2():
    df = pd.DataFrame({
        'name': ['lili', 'lucy','pegga','alin',np.nan],
        'age': [18, 16, np.nan, 23, np.nan],
        'salary': [np.nan, 300, np.nan, 1000, 800]
    })
    df_contains_nan = df.isnull()
    print(df_contains_nan)

    df_contains_nan_2 = df.isna()
    print(df_contains_nan_2)

上面的代码将输出

    name    age  salary
0  False  False    True
1  False  False   False
2  False   True    True
3  False  False   False
4   True   True   False
    name    age  salary
0  False  False    True
1  False  False   False
2  False   True    True
3  False  False   False
4   True   True   False

isnull,isna方法都是判断df中的元素是否为空,然后输出True/False。

要判断df中是否有空元素,只需要稍加改变

def t3():
    df = pd.DataFrame({
        'name': ['lili', 'lucy','pegga','alin',np.nan],
        'age': [18, 16, np.nan, 23, np.nan],
        'salary': [np.nan, 300, np.nan, 1000, 800]
    })
    contains_nan = df.isnull().values.any()
    print(contains_nan)

any方法只要ndarray中有任意一个元素为True就返回True。

    def any(self, axis=None, out=None, keepdims=False): # real signature unknown; restored from __doc__
        """
        a.any(axis=None, out=None, keepdims=False)
        
            Returns True if any of the elements of `a` evaluate to True.
        
            Refer to `numpy.any` for full documentation.
        
            See Also
            --------
            numpy.any : equivalent function
        """
        pass

2.统计空值个数

def t4():
    df = pd.DataFrame({
        'name': ['lili', 'lucy','pegga','alin',np.nan],
        'age': [18, 16, np.nan, 23, np.nan],
        'salary': [np.nan, 300, np.nan, 1000, 800]
    })

    # 每一列有多少个nan
    nan_column = df.isnull().values.astype(int).sum(axis=0)
    # 各列的nan个数
    nan_column_name = df.isnull().sum()
    print(nan_column)
    print('*'*10)
    print(nan_column_name)
    print('*'*10)
    # nan的总个数
    nan_all = df.isnull().sum().sum()
    print(nan_all)

[1 2 2]
**********
name      1
age       2
salary    2
dtype: int64
**********
5

上面的代码,展示了统计每行/列空值的个数,以及所有空值的个数。

3.按列填充空值

def t5():
    df = pd.DataFrame({
        'name': ['lili', 'lucy','pegga','alin',np.nan],
        'age': [18, 16, np.nan, 23, np.nan],
        'salary': [np.nan, 300, np.nan, 1000, 800]
    })
    print(df)

    df.name = df.name.fillna('unknown')
    df.age = df.age.fillna(df.age.mean())
    df.salary = df.salary.fillna(df.salary.max())

    print(df)

    name   age  salary
0   lili  18.0     NaN
1   lucy  16.0   300.0
2  pegga   NaN     NaN
3   alin  23.0  1000.0
4    NaN   NaN   800.0
      name   age  salary
0     lili  18.0  1000.0
1     lucy  16.0   300.0
2    pegga  19.0  1000.0
3     alin  23.0  1000.0
4  unknown  19.0   800.0

上面的代码,分别对name, age, salary列按固定值,当前列平均值,当前列最大值填充。

fillna函数有inplace参数,下面代码的效果与之前填充一致。

def t52():
    df = pd.DataFrame({
        'name': ['lili', 'lucy','pegga','alin',np.nan],
        'age': [18, 16, np.nan, 23, np.nan],
        'salary': [np.nan, 300, np.nan, 1000, 800]
    })
    print(df)

    df.name.fillna('unknown', inplace=True)
    df.age.fillna(df.age.mean(), inplace=True)
    df.salary.fillna(df.salary.max(), inplace=True)
    print(df)

4.按分组平均值填充

def t6():
    df = pd.DataFrame({
        'level': ['A','A','A','A','B','B','B','B','C','C','C'],
        'score': [2,1,3,np.nan,4,6,5,np.nan,7,9,np.nan],
    })

    fun = lambda x: x.fillna(df.groupby('level').score.mean()[x.level])
    df = df.apply(lambda x: fun(x), axis=1)
    # 以下一行代码也可以实现相同功能
    #df = df.apply(lambda x: x.fillna(df.groupby('level').score.mean()[x.level]), axis=1)
    print(df)

上面的代码,将score按level分组的平均值填充。

fun传入一行数据,然后通过分组值来获取当前分组的平均值,最后利用fillna来填充这个平均值即可。

代码输出如下:

   level  score
0      A    2.0
1      A    1.0
2      A    3.0
3      A    2.0
4      B    4.0
5      B    6.0
6      B    5.0
7      B    5.0
8      C    7.0
9      C    9.0
10     C    8.0

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python常用配置文件ini、json、yaml读写总结

    Python常用配置文件ini、json、yaml读写总结

    用的配置文件格式有ini、json、yaml等,下面简单给大家介绍下,Python如何读写这几种格式的文件,对Python读写ini、json、yaml配置文件相关知识感兴趣的朋友一起看看吧
    2021-07-07
  • Python连接MinIO的完整指南

    Python连接MinIO的完整指南

    MinIO作为高性能的分布式对象存储系统,凭借与Amazon S3兼容的API和云原生架构,成为企业级数据存储的优选方案,本文将系统讲解Python连接MinIO的全流程,涵盖从环境搭建到生产部署的完整实践路径,需要的朋友可以参考下
    2025-09-09
  • pycharm开发工具使用plt.show()不显示图像的解决方案

    pycharm开发工具使用plt.show()不显示图像的解决方案

    文章描述了在使用PyCharm开发工具时,`plt.show()`不显示图像的问题,并提供了两种解决方法:首先是在设置中取消勾选“PythonScientific”选项,然后重新运行程序即可显示图像
    2026-03-03
  • python实现批量修改图片格式和尺寸

    python实现批量修改图片格式和尺寸

    这篇文章主要为大家详细介绍了python实现批量修改图片格式和尺寸的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • 基于Python实现文件的压缩与解压缩

    基于Python实现文件的压缩与解压缩

    在日常工作中,除了会涉及到使用Python处理文本文件,有时候还会涉及对压缩文件的处理。本文为大家总结了利用Python可以实现的几种文件压缩与解压缩实现代码,需要的可以参考一下
    2022-03-03
  • python多线程抓取天涯帖子内容示例

    python多线程抓取天涯帖子内容示例

    这篇文章主要介绍了python多线程抓取天涯帖子内容示例,需要的朋友可以参考下
    2014-04-04
  • Python实现一键生成自解压源码文件并打包项目

    Python实现一键生成自解压源码文件并打包项目

    这篇文章主要为大家详细介绍了一个Python自解压源码方案,可将项目源码打包成单个.py文件,方便分发和存档,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-01-01
  • 解决Pycharm输入法无法切换中英文问题

    解决Pycharm输入法无法切换中英文问题

    这篇文章主要介绍了解决Pycharm输入法无法切换中英文问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Python Numpy学习之索引及切片的使用方法

    Python Numpy学习之索引及切片的使用方法

    数组中的元素可以通过索引以及切片的手段进行访问或者修改,和列表的切片操作一样。本文将详细为大家介绍一下Python中的科学计算库-Numpy的索引及切片的使用方法
    2022-01-01
  • python内置函数frozenset()的使用小结

    python内置函数frozenset()的使用小结

    本篇文章主要介绍了python内置函数frozenset()的使用小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05

最新评论