这是我参与11月更文挑战的第7天,活动详情查看:2021最后一次更文挑战
当我们有从网上爬下来的新鲜数据 标题 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")