python数据去重和缺失值处理(python删除缺失值)
当我们有从网上爬下来的新鲜数据标题 name, 作者 author, 评分 grade, 统计有多少人看过 stats
读取数据
使用pandas的 read_csv
方法读取数据, usecols可以选择某些指定的列进行读取,默认是所有列
import pandas as pd df = pd.read_csv("foodInfo.csv", usecols=['name', 'author', 'grade', 'stats'])复制代码
可以输出前五条看看效果 print(df.head()
)
去重
print(df.duplicated().value_counts())复制代码
通过输出的数据我们可以看到一共有103条数据,其中有一条重复的,我们也可以通过df.duplicated()
查看是哪一条是重复的数据
df.drop_duplicates(keep='first', inplace=True)复制代码
drop_duplicates
去重根据不同的情况有3个参数
subset : 列名数组,默认是全选,也就是如果指定的那几列的数据都重复了才进行删除
keep :默认是first, first是只保留第一次出现的重复行, last是只保留最后一次出现的重复行, False是删除所有的重复行
inplace : 为True就是在原数据上直接更改, 为False就是需要变量接收的
缺失值处理
# 查看哪一列有缺失值 print(df.isnull().any()) # 定位到有缺失值的那一列 data = df[df.isnull().values==True]复制代码
删除缺失值 dropna
df.dropna(how='any', inplace=True)复制代码
axis :0是行,1是列,默认是行
subset :对特定的列进行缺失值删除处理
how : any只要出现1个缺失值就删除整行,all所有列都是缺失值才删除
thresh : 缺失值的数量标准,达到这个阈值才会删除
inplace : 为True就是在原数据上直接更改, 为False就是需要变量接收的
填充缺失值 fillna
我是指定一个值去替换缺失值,将数据里面这个作者有评分的平均分填在缺失值上
def fillByAuthor(author): count = 0 sum = 0.0 for i in range(len(df)): if math.isnan(df.grade[i]): continue if df.author[i] == author: count = count + 1 sum = sum + df.grade[i] return round(sum / count, 2)复制代码
a = fillByAuthor('王光光光光') df.fillna(a, inplace=True)复制代码
inplace : 为True就是在原数据上直接更改, 为False就是需要变量接收的
method : pad/ffill:用前一个非缺失值去填充该缺失值; backfill/bfill:用下一个非缺失值填充该缺失值
None:指定一个值去替换缺失值(缺省默认这种方式)
limit :限制填充个数
axis:修改填充方向
另存为
df.to_csv("clean_data.csv")
作者:d粥
链接:https://juejin.cn/post/7032197455957458981