1.输出某列不同数据出现的次数:value_counts()
例如:df中常用语言所在列各种不同语言出现的次数。 df["Language"].value_counts()
2.
unique()方法返回的是去重之后的不同值,而nunique()方法则直接放回不同值的个数
print(Nowcoder.Language.nunique())
print(Nowcoder.Language.tolist())
| 2 3 4 5 6 | # 计算种类数的方法 print(Nowcoder["Language"].nunique()) # nunique可用来直接计算个数 print(len(Nowcoder["Language"].unique()))#输出去重后的结果 print(len(Nowcoder["Language"].value_counts().keys())) print(Nowcoder["Language"].value_counts().keys()) |
3.对apply(lambda)和map的使用
在pandas里apply是对dataframe的行或列级别进行的操作,和map一样也可以对list、series的元素级别进行的操作
例题:统计这些用户的名字长度
方法一:df['name'].str.len()
方法二:df['name'].apply(lambda x:len(x))
方法三:df['name'].map(lambda x:len(x))
4.dropna使用
dropna 参数:
axis: default 0指行,1为列
how: {‘any’, ‘all’}, default ‘any’指带缺失值的所有行;'all’指清除全是缺失值的
thresh: int,保留含有int个非空值的行
subset: 对特定的列进行缺失值删除处理
例:
去掉信息不全的用户:df.dropna()
5.缺失值填充:fillna()
df.fillna() ==>括号内为缺失值填充的内容
inplace参数的取值:True、False
- True:直接修改原对象
- False:创建一个副本,修改副本,原对象不变(缺省默认)
method参数的取值 : {‘pad’, ‘ffill’,‘backfill’, ‘bfill’, None}, default None
- pad/ffill:用前一个非缺失值去填充该缺失值
- backfill/bfill:用下一个非缺失值填充该缺失值
- None:指定一个值去替换缺失值(缺省默认这种方式)
limit参数:限制填充个数
axis参数:修改填充方向
6.重复值即删除duplicated
判断是否是重复值:df.duplicated()
删除重复值:df.drop_duplicated(subset=['A','B'],keep='first',inplace=True)
subset: 列名,可选,默认为None
keep: {‘first’, ‘last’, False}, 默认值 ‘first’
- first: 保留第一次出现的重复行,删除后面的重复行。
- last: 删除重复项,除了最后一次出现。
- False: 删除所有重复项。
7.日期转化
①调用datetime包(strptime)
strptime()是python内置方法,可以将字符串转化成日期格式
例如:date1 = '2021,1,1' ==>(转化成datetime格式)dt_date1 = datetime.strptime(date1,'%Y%m%d')
②to_datetime() ==>pandas日期转化
pd.to_datetime(df['列名'],format='%%%')
③如果我要判定日期的某个月,不能直接month(),需要用apply(),map()构建函数遍历
例如:2021年12月人群
df['date'] = pd.to_datetime(df['date],format = '%Y%m%d')或者df['date']= df['date'].map(lambda x:x.strftime('%Y-%m-%d'))
df = df[(df['date'].apply(lambda x:x.month) == 12)&(df['date'].apply(lambda x:x.year) == 2021)]
8.次日留存率问题
如果给定一个数据,里面包括访问日期和访问人id,如何计算该用户第二天任然访问的概率,即次日留存率问题?
个人想法:首先,第一步想到自连接,你需要用同样的数据和原数据依照用户id匹配;然后数据中有两个日期date1和date2,然后用date2减去date1,如果差为1说明该用户第二天任然访问,筛选出来后计算总的数量,然后看原始数据的总数量相除得到结果。
牛客网python例题:
现有牛客网12月每天练习题目情况的数据集nowcoder.csv。包含如下字段(字段之间用逗号分隔):
- user_id:用户id
- question_id:问题编号
- result:运行结果
- date:练习日期
现需要查看用户在某天练习后第二天还会再来练习的留存情况,请计算用户练习的平均次日留存率。
输入描述:数据集可以直接从当前目录下nowcoder.csv读取。
输出描述:以上数据集中某天练习后第二天还会再来的用户数除以user_id总次数(不考虑重复情况)记为平均此日留存率,结果保留两位小数。
代码结果:
import pandas as pd
nowcoder = pd.read_csv('nowcoder.csv')
total_id = nowcoder['user_id'],count()
df = pd.merge(nowcoder,nowcoder,on='user_id')
df['date_x']=pd.to_datetime(df.date_x).dt.date
df['date_y']=pd.to_datetime(df.date_y).dt.date
df['differ']=df.date_y-df.date_x
sum_diff=df[df.differ=='1 days'].differ.count()
res=round(sum_diff/total_id,2)
print(res)



