栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

pandas学习(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

pandas学习(一)

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)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1030991.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号