牛客编程题python数据分析49题(pandas库的使用)

Posted 小哈里

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了牛客编程题python数据分析49题(pandas库的使用)相关的知识,希望对你有一定的参考价值。

【牛客编程题】python数据分析49题(pandas库使用)
做题链接:https://www.nowcoder.com/exam/oj?page=1&tab=Python%E7%AF%87&topicId=326

文章目录

什么是pandas库

在 Python 自带的科学计算库中,Pandas 模块是最适于数据科学相关操作的工具。它与 Scikit-learn 两个模块几乎提供了数据科学家所需的全部工具。

Pandas 的核心是一个高效易用的数据类型:DataFrame
其他适用的数据类型有:Series,CSV,JSON

参考资料:

参考1:https://www.runoob.com/pandas/pandas-tutorial.html
参考2:gairuo.com/p/pandas-selecting-data

部分常用函数

import pandas as pd 
nowcoder = pd.read_csv('nowcoder.csv', parse_dates=True, index_col='date')


# 1、查看数据(行,列)
len(Nowcoder.columns) # 列数
Nowcoder[1:6] #1-6行
Nowcoder.loc[10,:] #第10行
Nowcoder.iloc[-5:,[0,1,2,5]] # 最后5行的指定列
Nowcoder.loc[Nowcoder.Language.isin(["CPP", "C", "C#"])]#筛选某个列的条件
Nowcoder.isnull().all() #某一列是否存在空值
Nowcoder.duplicated() # 某一行是否重复
Nowcoder[Nowcoder['Language']=="Python"] # 筛选某个条件
Nowcoder[Nowcoder['Language']=='Python']['Achievement_value'] #筛选某个条件
Nowcoder[(Nowcoder.Language=='Java')&(Nowcoder.Graduate_year==2020)]#筛选多个条件
Nowcoder[Nowcoder.Num_of_exercise>=500][['Level','Achievement_value']]#筛选某个条件
df['name']  # 会返回本列的 Series
df[['Q1', 'Q2']] # 选择两列,返回 DataFrame
df[:2] # 切片前两行数据
df.loc[[0,5,10]] # 指定索引 0,5,10 的行


# 2、数据特征(统计值)
Nowcoder['Language'].value_counts() #对某列进行数据透视(分组统计)
Nowcoder['Continuous_check_in_days'].max() # 某一列的最大值,最小值
Nowcoder[Nowcoder['Language'] == 'Python']['Number_of_submissions'].mean()#某一列满足特定条件的平均数
Nowcoder[Nowcoder['Num_of_exercise'] >=10]['Level'].median() #某一列满足特定条件的中位数
Nowcoder['Language'].nunique() # 某一列的种类数
Nowcoder['Language'].unique() # 某一列有哪些种类(list)
Nowcoder['Level'].mode() # 某一列的众数
Nowcoder[['Achievement_value','Continuous_check_in_days']].quantile(0.25) # 某一列的分位数,前1/4
Nowcoder['Num_of_exercise'].var().round(2) # 某一列的方差
Nowcoder['Number_of_submissions'].std().round(2) #某一列的标准差
Nowcoder[Nowcoder['Level']==7]['Achievement']/Nowcoder['Achievement'].sum() # 满足特定条件的值占总和的比例
Nowcoder['Name'].str.len() # 某一列的每个字符串的长度


# 3、数据清洗(缺失,填充,修改)
Nowcoder[Nowcoder.isna() == False] # 去掉有缺失数据的行
Nowcoder.drop_duplicates(0) # 去除重复的行
Nowcoder['Graduate_year'].fillna(value=Nowcoder['Graduate_year'].max(),inplace=True) #用最大值填充毕业年份
Nowcoder['Language'].fillna(value='Python',inplace=True) # 用Python填充缺失语言
Nowcoder['Achievement_value'].fillna(value=round(Nowcoder['Achievement_value'].mean(),0),inplace=True) # 用平均值填充缺失成就值
Nowcoder['Last_submission_time'] = pd.to_datetime(Nowcoder["Last_submission_time"],format="%Y-%m-%d") # 标准化年份数据
pd.DataFrame(json.loads("1.json")) # 将json转为表格
nowcoder.rename(columns='date':'year-month-day',inplace=True)#修改某一列的列名


# 4、数据操作(筛选,合并,排序)
nowcoder.groupby(by='date')['question_id'].count() # 按某一列分组,并对id计数
nowcoder.groupby(by=['result','year-month-day'])['question_id'].count() # 按多列分组筛选,并对id计数
nowcoder.groupby(['result']).result.count() #对某一列分组并计数
Nowcoder.groupby(['Level','Language']).Nowcoder_ID.count() # 对多列分组并计数
Nowcoder.groupby('Level')['Nowcoder_ID'].count() > 5 # 对多列分组计数并筛选
a=pd.merge(items,signup,on='item_id',how='left') #合并两个csv文件
a = pd.concat([signup,signup1],axis=0)
b = pd.merge(a,items,how='left',on='item_id') # 合并3个csv文件
df = pd.merge(signup,items,on="item_id",how="left")
pd.merge(Nowcoder1,Nowcoder2,on='Nowcoder_ID')
df=pd.merge(Nowcoder1, Nowcoder2, on='Nowcoder_ID', how='inner') #合并用户信息
res = sales.sort_values(by=['monetary'], ascending=False) # 对某一列排序
res = res.reset_index(drop=True) # 更新排序后的索引
Nowcoder.sort_values(by='Level', ascending = False) # 对某一列排序(升序)
sales['R_Quartile'] = pd.qcut(sales['recency'], [0, 0.25, 0.5, 0.75, 1],["4", "3", "2", "1"]).astype("int") # 分位数,更新标签,前1/4打4分,后1/4打1分
sales['M_Quartile'] = pd.qcut(sales['monetary'], [0, 0.25, 0.5, 0.75, 1],["1", "2", "3", "4"]).astype("int") # 反向打分
sales['R_Quartile'] = pd.qcut(sales['recency'],4,["4", "3", "2", "1"]).astype("int") # 分位数,更新标签



01 查看数据

DA1 用pandas查看牛客网用户数据

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',',dtype=object)
print(Nowcoder[1:6])
# print(Nowcoder.head(5))

#import numpy as np
#df1=np.read_csv('Nowcoder.csv')
#print(Nowcoder[1:6,:])

DA2 牛客网用户数据集的大小

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',',dtype=object)
a = len(Nowcoder)
b = len(Nowcoder.columns)
print((a,b))

DA3 牛客网的第10位用户

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',',dtype=object)

print(Nowcoder.loc[10,:])
# print(Nowcoder.iloc[10,:])

DA4 统计牛客网部分用户使用语言

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',',dtype=object)

# loc :  Selection by Label ,按标签取数据
print(Nowcoder.iloc[10:20, 5])

02 数据索引

DA5 牛客网用户没有补全的信息

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',',dtype=object)

# 代用isnull判断,后跟条件any方法到条件
# print(Nowcoder.isnull().any(axis=0))
print(Nowcoder.isnull().all())

DA6 查看牛客网哪些用户使用Python

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',',dtype=object)

lan = Nowcoder[Nowcoder['Language']=="Python"]
print(lan)

DA7 牛客网Python用户的成就值

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',')
print(Nowcoder[Nowcoder['Language']=='Python']['Achievement_value'] )

DA8 文件最后用户的部分数据

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
#print(Nowcoder[['Nowcoder_ID','Level','Achievement_value','Language']].tail(5))
print(Nowcoder.iloc[-5:,[0,1,2,5]])

03 逻辑运算

DA9 2020年毕业的人中最喜欢用Java的用户

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',')
pd.set_option('display.width', 300) # 设置字符显示宽度
pd.set_option('display.max_rows', None) # 设置显示最大行
pd.set_option('display.max_columns', None)
print(Nowcoder[(Nowcoder.Language=='Java')&(Nowcoder.Graduate_year==2020)])

DA9 牛客网C系用户们的信息

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',')
pd.set_option('display.width', 300) # 设置字符显示宽度
pd.set_option('display.max_rows', None) # 设置显示最大行
pd.set_option('display.max_columns', None)
print(Nowcoder.loc[Nowcoder.Language.isin(["CPP", "C", "C#"])])

DA10 统计牛客网刷题数量500以上的大佬

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',')
print(Nowcoder[Nowcoder.Num_of_exercise>=500][['Level','Achievement_value']])

DA11 按照毕业年份与使用语言筛选牛客网7级用户

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
pd.set_option('display.width', 300) # 设置字符显示宽度
pd.set_option('display.max_rows', None) # 设置显示最大行
pd.set_option('display.max_columns', None)

print(Nowcoder[(Nowcoder.Language=='CPP')&(Nowcoder.Level==7)&(Nowcoder.Graduate_year!=2018)])

04 中级函数

DA12 牛客网不同语言使用人数

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')

print(Nowcoder['Language'].value_counts())

DA13 牛客网用户最近的最长与最短连续签到天数

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
print(Nowcoder['Continuous_check_in_days'].max())
print(Nowcoder['Continuous_check_in_days'].min())

DA14 Python用户的平均提交次数

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
print(round(Nowcoder[Nowcoder['Language'] == 'Python']['Number_of_submissions'].mean(),1))

DA15 牛客网用户等级的中位数

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
print(int(Nowcoder[Nowcoder['Num_of_exercise'] >=10]['Level'].median()))

DA16 用户常用语言有多少

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
print(Nowcoder['Language'].nunique())
print(list(Nowcoder['Language'].unique()))

DA17 牛客网最多的用户等级

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
res = Nowcoder['Level'].mode() #求众数
print(pd.DataFrame(res,columns = ['Level'])) #输出格式

DA18 用分位数分析牛客网用户活动

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
print(Nowcoder[['Achievement_value','Continuous_check_in_days']].quantile(0.25))
print(Nowcoder[['Num_of_exercise','Number_of_submissions']].quantile(0.75))

DA19 牛客网大佬之间的差距

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
mx = Nowcoder[Nowcoder['Level']== 7]['Achievement_value'].max()
mi = Nowcoder[Nowcoder['Level'] == 7]['Achievement_value'].min()
print(mx-mi)

Python百日刷题计划Day7~牛客题库高效练习

牛客编程题python入门103题(输入&类型,字符串&列表&字典&元组,运算&条件&循环,函数&类&正则)

华为牛客网机试都是编程么

牛客编程题shell34题(Linux awk,grep命令)

牛客网上的java编程题,自己电脑运行没问题,但是在牛客网上运行失败,不知道原因在哪里

牛客网在线判题系统JavaScript(V8)使用