Python Pandas 处理空数据/缺失数据 dropna fillna,增加/更新列 assign,分层 qcut,向量函数

2023-11-15

数据准备

import pandas as pd
import numpy as np
# 假设有 5 个人,分别参加了 4 门课程,获得了对应的分数
# 同时这个 5 个人分别负责的项目个数 在 'Project_num' 列中显示
data = {'name' : pd.Series(['Alice', 'Bob', 'Cathy', 'Dany', 'Ella', 'Ford', 'Gary', 'Ham', 'Ico', 'Jack']),
        'Math_A' : pd.Series([1.1, 2.2, 3.3, 4.4, 5, 3.2, 2.4, 1.5, 4.3]),
        'English_A' : pd.Series([3, 2.6, 2, 1.7, 3, 3.3, 4.4, 5, 3.2, 2.4]),
        'Math_B' : pd.Series([1.7, 2.5, 3.6, 2.4, 5, 2.2, 3.3, 4.4, 1.5, 4.3]),
        'English_B' : pd.Series([5, 2.6, 2.4, 1.3, 3, 3.6, 2.4, 5, 2.2]),
        'Project_num' : pd.Series([2, 3, 0, 1, 7, 2, 1, 5, 3, 4]),
        'Sex' : pd.Series(['F', 'M', 'M', 'F', 'M', 'F', 'M', 'M', 'F', 'M'])
     }
df = pd.DataFrame(data)
print(df)

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex
0  Alice     1.1        3.0     1.7        5.0            2   F
1    Bob     2.2        2.6     2.5        2.6            3   M
2  Cathy     3.3        2.0     3.6        2.4            0   M
3   Dany     4.4        1.7     2.4        1.3            1   F
4   Ella     5.0        3.0     5.0        3.0            7   M
5   Ford     3.2        3.3     2.2        3.6            2   F
6   Gary     2.4        4.4     3.3        2.4            1   M
7    Ham     1.5        5.0     4.4        5.0            5   M
8    Ico     4.3        3.2     1.5        2.2            3   F
9   Jack     NaN        2.4     4.3        NaN            4   M

一、处理缺失数据

1.1 去除有缺失数据的行 dropna

print(df.dropna())
# 由于 Jack 的数据有 缺失,所以删除这一行
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex
0  Alice     1.1        3.0     1.7        5.0            2   F
1    Bob     2.2        2.6     2.5        2.6            3   M
2  Cathy     3.3        2.0     3.6        2.4            0   M
3   Dany     4.4        1.7     2.4        1.3            1   F
4   Ella     5.0        3.0     5.0        3.0            7   M
5   Ford     3.2        3.3     2.2        3.6            2   F
6   Gary     2.4        4.4     3.3        2.4            1   M
7    Ham     1.5        5.0     4.4        5.0            5   M
8    Ico     4.3        3.2     1.5        2.2            3   F

1.2 替换缺失数据 fillna

print(df.fillna(0))
# 将 Jack 的空缺数据,用 0 补上
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex
0  Alice     1.1        3.0     1.7        5.0            2   F
1    Bob     2.2        2.6     2.5        2.6            3   M
2  Cathy     3.3        2.0     3.6        2.4            0   M
3   Dany     4.4        1.7     2.4        1.3            1   F
4   Ella     5.0        3.0     5.0        3.0            7   M
5   Ford     3.2        3.3     2.2        3.6            2   F
6   Gary     2.4        4.4     3.3        2.4            1   M
7    Ham     1.5        5.0     4.4        5.0            5   M
8    Ico     4.3        3.2     1.5        2.2            3   F
9   Jack     0.0        2.4     4.3        0.0            4   M

二、增加/更新列

2.1 指定生成列的方式

df_2 = df.assign(Chinese_A=np.random.randint(1,5,size=10))
print(df_2)
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex  Chinese_A
0  Alice     1.1        3.0     1.7        5.0            2   F          2
1    Bob     2.2        2.6     2.5        2.6            3   M          2
2  Cathy     3.3        2.0     3.6        2.4            0   M          2
3   Dany     4.4        1.7     2.4        1.3            1   F          4
4   Ella     5.0        3.0     5.0        3.0            7   M          2
5   Ford     3.2        3.3     2.2        3.6            2   F          4
6   Gary     2.4        4.4     3.3        2.4            1   M          2
7    Ham     1.5        5.0     4.4        5.0            5   M          2
8    Ico     4.3        3.2     1.5        2.2            3   F          2
9   Jack     NaN        2.4     4.3        NaN            4   M          1

2.2 复制现有的列生成新的列

df_2 = df.assign(Chinese_A=df.English_A)
print(df_2)
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex  Chinese_A
0  Alice     1.1        3.0     1.7        5.0            2   F        3.0
1    Bob     2.2        2.6     2.5        2.6            3   M        2.6
2  Cathy     3.3        2.0     3.6        2.4            0   M        2.0
3   Dany     4.4        1.7     2.4        1.3            1   F        1.7
4   Ella     5.0        3.0     5.0        3.0            7   M        3.0
5   Ford     3.2        3.3     2.2        3.6            2   F        3.3
6   Gary     2.4        4.4     3.3        2.4            1   M        4.4
7    Ham     1.5        5.0     4.4        5.0            5   M        5.0
8    Ico     4.3        3.2     1.5        2.2            3   F        3.2
9   Jack     NaN        2.4     4.3        NaN            4   M        2.4

2.3 利用现有的列数据,按照函数生成新的列

2.3.1 方式一

df_2 = df.assign(Math_Total=lambda x:x['Math_A']+x['Math_B'])
# 计算 Math_A 和 Math_B 的加总分数
print(df_2)
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex  Math_Total
0  Alice     1.1        3.0     1.7        5.0            2   F         2.8
1    Bob     2.2        2.6     2.5        2.6            3   M         4.7
2  Cathy     3.3        2.0     3.6        2.4            0   M         6.9
3   Dany     4.4        1.7     2.4        1.3            1   F         6.8
4   Ella     5.0        3.0     5.0        3.0            7   M        10.0
5   Ford     3.2        3.3     2.2        3.6            2   F         5.4
6   Gary     2.4        4.4     3.3        2.4            1   M         5.7
7    Ham     1.5        5.0     4.4        5.0            5   M         5.9
8    Ico     4.3        3.2     1.5        2.2            3   F         5.8
9   Jack     NaN        2.4     4.3        NaN            4   M         NaN

2.3.2 方式二

df_3 = df.assign(English_Total=lambda df:df['English_A']+df['English_B'])
# 计算 English_A 和 English_B 的加总分数
print(df_3)
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex  English_Total
0  Alice     1.1        3.0     1.7        5.0            2   F            8.0
1    Bob     2.2        2.6     2.5        2.6            3   M            5.2
2  Cathy     3.3        2.0     3.6        2.4            0   M            4.4
3   Dany     4.4        1.7     2.4        1.3            1   F            3.0
4   Ella     5.0        3.0     5.0        3.0            7   M            6.0
5   Ford     3.2        3.3     2.2        3.6            2   F            6.9
6   Gary     2.4        4.4     3.3        2.4            1   M            6.8
7    Ham     1.5        5.0     4.4        5.0            5   M           10.0
8    Ico     4.3        3.2     1.5        2.2            3   F            5.4
9   Jack     NaN        2.4     4.3        NaN            4   M            NaN

2.3.3 方式三

df_4 = df.assign(Total = df_2.Math_Total + df_3.English_Total)
# 将计算总分 Total
print(df_4)
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex  Total
0  Alice     1.1        3.0     1.7        5.0            2   F   10.8
1    Bob     2.2        2.6     2.5        2.6            3   M    9.9
2  Cathy     3.3        2.0     3.6        2.4            0   M   11.3
3   Dany     4.4        1.7     2.4        1.3            1   F    9.8
4   Ella     5.0        3.0     5.0        3.0            7   M   16.0
5   Ford     3.2        3.3     2.2        3.6            2   F   12.3
6   Gary     2.4        4.4     3.3        2.4            1   M   12.5
7    Ham     1.5        5.0     4.4        5.0            5   M   15.9
8    Ico     4.3        3.2     1.5        2.2            3   F   11.2
9   Jack     NaN        2.4     4.3        NaN            4   M    NaN

2.4 对现有列数据进行更新

df_5 = df_4.assign(Total = lambda df : df.Total*2)
# 将总分翻倍
print(df_5)
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex  Total
0  Alice     1.1        3.0     1.7        5.0            2   F   21.6
1    Bob     2.2        2.6     2.5        2.6            3   M   19.8
2  Cathy     3.3        2.0     3.6        2.4            0   M   22.6
3   Dany     4.4        1.7     2.4        1.3            1   F   19.6
4   Ella     5.0        3.0     5.0        3.0            7   M   32.0
5   Ford     3.2        3.3     2.2        3.6            2   F   24.6
6   Gary     2.4        4.4     3.3        2.4            1   M   25.0
7    Ham     1.5        5.0     4.4        5.0            5   M   31.8
8    Ico     4.3        3.2     1.5        2.2            3   F   22.4
9   Jack     NaN        2.4     4.3        NaN            4   M    NaN

三、分层 pd.qcut

3.1 方式一

print(pd.qcut(df.Math_A,[0,0.5,1],labels=['低分','高分']))
# 分 2 层,各一半
print('\n')

运行结果:

0     低分
1     低分
2     高分
3     高分
4     高分
5     低分
6     低分
7     低分
8     高分
9    NaN
Name: Math_A, dtype: category
Categories (2, object): [低分 < 高分]

3.2 方式二

print(pd.qcut(df.Math_A,[0,0.2,0.8,1],labels=['低分','中等','高分']))
# 分 3 层,第一层占 20%,第二次 60%,第三层 20%
print('\n')

运行结果:

0     低分
1     中等
2     中等
3     高分
4     高分
5     中等
6     中等
7     低分
8     中等
9    NaN
Name: Math_A, dtype: category
Categories (3, object): [低分 < 中等 < 高分]

3.3 方式三

print(pd.qcut(df.Math_A,3,labels=['低分','中等','高分']))
# 默认方式分 3 层
print('\n')

运行结果:

0     低分
1     低分
2     中等
3     高分
4     高分
5     中等
6     中等
7     低分
8     高分
9    NaN
Name: Math_A, dtype: category
Categories (3, object): [低分 < 中等 < 高分]

四、向量函数 max,min,clip,abs

4.1 纵向/列取最大值 df.max

print(df.max())
# 纵向取最大值
print('\n')

运行结果:

name           Jack
Math_A            5
English_A         5
Math_B            5
English_B         5
Project_num       7
Sex               M
dtype: object

4.2 横向/行取最大值

print(df.max(axis=1))
# 横取最大值
print('\n')

运行结果:

0    5.0
1    3.0
2    3.6
3    4.4
4    7.0
5    3.6
6    4.4
7    5.0
8    4.3
9    4.3
dtype: float64

4.3 修剪/设定截取区间 clip

print(df.Math_A.clip(lower = 1, upper = 2))
# 将 Math_A 设定在 1~2 之间
print('\n')

运行结果:

0    1.1
1    2.0
2    2.0
3    2.0
4    2.0
5    2.0
6    2.0
7    1.5
8    2.0
9    NaN
Name: Math_A, dtype: float64

4.4 取绝对值 abs

df_6 = df.assign(Test=df.Math_A-2)
print(df_6)
print('\n')
print(df_6.Test.abs())
print('\n')

运行结果:

    name  Math_A  English_A  Math_B  English_B  Project_num Sex  Test
0  Alice     1.1        3.0     1.7        5.0            2   F  -0.9
1    Bob     2.2        2.6     2.5        2.6            3   M   0.2
2  Cathy     3.3        2.0     3.6        2.4            0   M   1.3
3   Dany     4.4        1.7     2.4        1.3            1   F   2.4
4   Ella     5.0        3.0     5.0        3.0            7   M   3.0
5   Ford     3.2        3.3     2.2        3.6            2   F   1.2
6   Gary     2.4        4.4     3.3        2.4            1   M   0.4
7    Ham     1.5        5.0     4.4        5.0            5   M  -0.5
8    Ico     4.3        3.2     1.5        2.2            3   F   2.3
9   Jack     NaN        2.4     4.3        NaN            4   M   NaN


0    0.9
1    0.2
2    1.3
3    2.4
4    3.0
5    1.2
6    0.4
7    0.5
8    2.3
9    NaN
Name: Test, dtype: float64
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Pandas 处理空数据/缺失数据 dropna fillna,增加/更新列 assign,分层 qcut,向量函数 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何使用Conda下载python包并随后离线安装?

    我知道通过 pip 我可以使用以下命令下载 Python 包 但 pip install 破坏了我的内部包依赖关系 当我做 pip download
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Pandas:merge_asof() 对多行求和/不重复

    我正在处理两个数据集 每个数据集具有不同的关联日期 我想合并它们 但因为日期不完全匹配 我相信merge asof 是最好的方法 然而 有两件事发生merge asof 不理想的 数字重复 数字丢失 以下代码是一个示例 df a pd Da
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • 如何计算 pandas 数据帧上的连续有序值

    我试图从给定的数据帧中获取连续 0 值的最大计数 其中包含来自 pandas 数据帧的 id date value 列 如下所示 id date value 354 2019 03 01 0 354 2019 03 02 0 354 201
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 百度翻译参数逆向过程

    翻译网站sign参数逆向 网址 aHR0cHM6Ly9mYW55aS5iYWlkdS5jb20v JS调试 加密参数sign 使用XHR断点 再查看方法调用栈 很容易定位到加密函数 经测试 原来就是这个b函数进行的加密 参数就是我们要翻译的
  • Python3.8+Pytorch1.0+CUDA11.1环境配置+安装pytorch-geometric

    1 conda创建环境 conda create n gnn python 3 8 2 安装pytorch pip install torch 1 9 0 cu111 torchvision 0 10 0 cu111 torchaudio
  • 国产开源IoTOS:腾讯物联网操作系统TencentOS Tiny的探索与实践

    导语 腾讯物联网终端操作系统 TencentOS tiny 是腾讯面向物联网领域自主研发的嵌入式实时操作系统 可助力物联网终端设备及业务快速接入腾讯云物联网平台 本文是对腾讯高级工程师汪礼超 赵健在云 社区 online 分享的整理 为大家
  • python操作word表格,并修改表格内容

    1 安装win32com client库 pip install pywin32 2 导包 import win32com client 3 总代码 import os import win32com client 创建 Word 应用程序
  • MySQL 在windos安装和遇到问题

    目录 一 安装 1 下载 2 安装MySQL 二 出现问题如下
  • Harvard transformer NLP 模型 openNMT 简介入门

    项目网址 OpenNMT Open Source Neural Machine Translation logo 一 从应用的层面先跑通 Harvard transformer GitHub harvardnlp annotated tra
  • 解决 An attempt was made to call a method that does not exist. 问题详解

    哈喽大家好 我是阿Q 今天在开发代码的过程中 由于手抖 不知道引入了什么包依赖 导致项目启动一直报错 特写本文来记录下解决问题的经过 文章目录 问题描述 报错信息如下 报错描述 解决方法 总结 有想赚点外块 技术交流的朋友 欢迎来撩 问题描
  • POI生成带图片Word

    RequestMapping exportHt public void exportHt RequestParam fid String fid HttpServletResponse response throws Exception i
  • linux移动文件到另一个文件夹命令_Linux 使用 mv 命令重命名或移动文件

    使用方法 split help 用法 mv 选项 T 源 目标 mv 选项 源 目标 mv 选项 t 目标 源 重命名或者移动文件 目录 长选项必须使用的参数对于短选项时也是必需使用的 b 类似 backup 选项 但不接受参数 覆盖前先备
  • ZooKeeper(八)伸缩性

    一 ZooKeeper中Observer 1 1 ZooKeeper角色 经过前面的介绍 我想大家都已经知道了在ZooKeeper集群当中有两种角色Leader和Follower Leader可以接受client 请求 也接收其他Serve
  • 记一次JVM参数调优经历

    1 背景 定时任务每秒向客户端推送10w全量数据 预计最大有30M 两个用户系统勉强能用 六个 几分钟后系统不可用 频发full gc 导致系统不可用 2 最终方案 3 常见参数介绍 3 1 jps jps查看所有java进程编号 相当与
  • 顺序栈的基本操作(初始化、销毁、判空等)

    1 实验目的 通过该实验 让学生掌握栈的相关基本概念 认识栈是插入和删除集中在一端进行的线性结构 掌握栈的 先入后出 操作特点 栈在进行各类操作时 栈底指针固定不动 掌握栈空 栈满的判断条件 2 实验内容 用顺序存储结构 实现教材定义的栈的
  • 最大子数组之和对应的子数组

    给定一个整数数组 包含正负数 找到一个具有最大和的子数组 返回其最大的子数组 public static List
  • [译]理解HTTP/304响应

    原文 http www telerik com automated testing tools blog eric lawrence 12 11 06 understanding http 304 responses aspx 刚刚开始使用
  • 【JetBrains】安装使用技巧

    JetBrains 使用 JetBrains Toolbox 管理 IDE 远程开发 Gateway 通过 SSH 连接 疑难杂症 1 部署失败 使用 JetBrains Toolbox 管理 IDE 下载 Toolbox 工具 解压运行
  • Wireshark常用命令

    目录 页面 命令 不定期更新我自己遇到的语法 页面 命令 数据链路层 筛选mac地址为04 f9 38 ad 13 26的数据包 eth src 04 f9 38 ad 13 26 筛选源mac地址为04 f9 38 ad 13 26的数据
  • 模板特化

    上一篇 模板与重载 里 我遇见了想同时使用模板函数与非模板函数的情况 后来才知道 其实并不需要 当我想对某些特定的类型进行特殊操作时 只需要使用模板特化就可以 所谓特化 就是说对于模板函数 对于某些类型可能需要特殊处理 所以进行特殊化 可以
  • OpenApi-Generator:简化RESTful API开发流程

    目录 1 OpenAPI Generator简介 1 1 OpenAPI Generator是什么 1 2 为什么选择OpenAPI Generator 1 3 谁需要 OpenAPI Generator 2 OpenAPI 2 0规范 2
  • 单臂路由实现原理

    一 概述 单臂路由 router on a stick 是指在路由器的一个接口上通过配置子接口 或 逻辑接口 并不存在真正物理接口 的方式 实现原来相互隔离的不同VLAN 虚拟局域网 之间的互联互通 单臂路由的子接口 路由器的物理接口可以被
  • Python Pandas 处理空数据/缺失数据 dropna fillna,增加/更新列 assign,分层 qcut,向量函数

    Pandas 处理空数据 缺失数据 增加 更新列 分层 向量函数 数据准备 一 处理缺失数据 1 1 去除有缺失数据的行 dropna 1 2 替换缺失数据 fillna 二 增加 更新列 2 1 指定生成列的方式 2 2 复制现有的列生成