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

有两种丢失的数据:

  • 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'))

猜你喜欢

转载自blog.csdn.net/qq_24946843/article/details/83417136