数据分析学习记录-----DAY5
25.修补缺失的用户数据:
该题不写 dtype=object 会报错
print的时候不可以直接写print(Nowcoder['Achievement_value'].fillna(value=mean_achievement,inplace=True))
要先:
Nowcoder['Achievement_value'].fillna(value=mean_achievement,inplace=True
print(Nowcoder)
26.解决牛客网用户重复的数据:
判断是否为重复:
Nowcoder.duplicated()
删除重复数据:
Nowcoder.drop_duplicates()
27.统一最后刷题日期的格式:
该题不写 dtype=object 会报错
pandas库中的to_datetime()函数可以将字符串或者数字转换为日期格式的数据。
df[''date]数据类型为“object”,通过pd.to_datetime将该列数据转换为时间类型,即datetime
df['Last_submission_time']=pd.to_datetime(df['Last_submission_time'],format='%Y-%m-%d')
28.将用户的json文件转换为表格形式:
读取Json文件:df=pd.read_json('Nowcoder.json',dtype=dict)
29.牛客网的每日练题量:
groupby()的常见用法
df.groupby(‘key1’):一列聚合 分组键为列名(可以是字符串、数字或其他Python对象)
df.groupby([‘key1’,‘key2’]):多列聚合 分组键为列名,引入列表list[]
df[‘data1’].groupby(df[‘key1’]).mean():按某一列进行一重聚合求均值 分组键为Series
A=df[‘订单编号’].groupby([ df[‘运营商’], df[‘分类’], df[‘百度圣卡’] ]).count() 按某一列进行多重聚合计数 分组键为Series,引入列表list[]
df[‘data1’].groupby([states,years]).mean() 分组键与原df无关,而是另外指定的任何长度适当的数组 分组键是数组,state和year均为数组
df['date']=pd.to_datetime(df['date'],format='%Y-%m-%d')
print(df['date'].groupby(df['date']).count())
30.牛客网用户练习的平均次日留存率:
df["date"] = pd.to_datetime(df["date"]).dt.date 将date信息里面的时间信息去掉,仅留下日期信息
datetime.timedelta:表示时间间隔,即两个时间点之间的长度。datetime.timedelta(days=1) 表示时间间隔为一天。
import pandas as pd
from datetime import timedelta
nowcoder=pd.read_csv('nowcoder.csv',dtype=object)
pd.set_option('display.max_columns', None)# 显示所有的列,而不是以……显示
pd.set_option('display.max_rows', None)# 显示所有的行,而不是以……显示
pd.set_option('display.width', None) # 不自动换行显示
df = pd.merge(nowcoder,nowcoder,on='user_id',suffixes=['_a','_b']) #将同一个表合并一次.(这个合并操作:同一个id在不同日期,有a,b两种表现,则合并为aa,ab,ba,bb)
df.date_a = pd.to_datetime(df.date_a).dt.date #去除信息中的时间信息
df.date_b = pd.to_datetime(df.date_b).dt.date
df = df[(df.date_a+timedelta(days=1))==df.date_b] #将date_b赋值为后一天的信息,并且在这个过程中完成了去重操作(每一个id只有一个时间信息了)
all_num = nowcoder.user_id.count() 计算操作前的user数量
again_num = df.user_id.count() 计算操作后的
print(round(again_num/all_num,2))