python学习笔记八:pandas处理丢失数据

本文详细介绍了在Python中处理缺失数据的技巧,包括使用None和np.nan的区别,如何使用pandas库的isnull(), notnull(), dropna()和fillna()函数来查找、删除和填充缺失值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有两种丢失的数据:

  • None是python自带的,其类型为python.object,因此,None不能参与到任何计算中,object类型的运算要比int类型的运算慢得多
  • np.nan(NaN)是浮点类型,能参与到计算中,但计算的结果总是NaN
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt

df = DataFrame({'age':[20,21,23,19,22],'salary':[10000,11000,9900,8500,15000]},
                index=['张三','李四','王五','赵六','童七'],columns=['age','salary','work'])
df

将李四到赵六之间的人的工作设为programmer :

df.work['李四':'赵六'] = 'programmer'
df

 

 找到空数据和保留非空数据:

#找到空数据
s1 = df.isnull().any(axis=1)#any只要有一个为True,就返回True
#有了s1数据,则可以获取哪些数据为空,只要有一个属性为空,则该行数据就没用,认为是空
print(df[s1])

#保留非空的数据
s2 = df.notnull().all(axis=1)#all都为True才返回True
print(df[s2])

利用过滤函数dropna()过滤掉空数据: 

#过滤函数dropna()
print(df.dropna())#默认axis=0即为行,how='any'即哪一行只要有一个空数据就把该行剔除掉
df.dropna(axis=1)#axis=1时为列,how='any'哪一列即哪一个属性中只要有一个空数据就把该列剔除掉

只有某一行或某一列数据全为空时才剔除掉:

df.loc['张三'] = np.nan
print(df)
df.dropna(how='all')#默认axis=0即为行,how='any'哪一行全部为空才把该行剔除掉

利用填充函数fillna()对空数据进行填充:

df.fillna(value = 'student')#全部填充

print(df)

print(df.fillna(method='ffill'))#按行由前向后填充

print(df.fillna(method='bfill'))#按行由后向前填充,默认axis=0,即按行填充,若inplace=True,就是在原来的数据上进行修改,默认为False即重新创建一个DataFrame

全部填充
用给定值全部填充空数据
按行由前向后填充
按行由后向前填充

 

 

小 练习:

df1 = DataFrame(np.random.randint(0,150,size=(4,3)),index=['张三','李四','王五','赵六'],columns=['语文','数学','英语'])
print(df1)

#将张三的英语成绩记为NaN
df1['英语']['张三'] = np.nan
print(df1)

#用数学成绩填充英语成绩
print(df1.fillna(method='ffill',axis=1))

#用李四的英语成绩填充张三的英语成绩
print(df1.fillna(method='bfill'))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值