python数据去重和缺失值处理

552 阅读2分钟

这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战

当我们有从网上爬下来的新鲜数据 QQ图片20211119153946.png 标题 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())

屏幕截图 2021-11-19 155901.png

通过输出的数据我们可以看到一共有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]

屏幕截图 2021-11-19 161310.png

删除缺失值 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")

QQ图片20211119154500.gif