问题
【问题一】 Series和DataFrame有哪些常见属性和方法?
Series:
value:获取数组的值
index:获取索引
name:series的name
dtype:数组元素类型
Series():创建Series
.drop():删除指定项
Dataframe:
Series属性
columns:列索引(列名)
.rename():修改行或列名
.pop()/.drop():删除
.head():取前n行/列
.tail():取后n行/列
.unique():显示所有的唯一值
.nunique:显示有多少个唯一值
.count():返回非缺失值元素个数
.value_counts():返回每个元素有多少个
.clip():是对超过或者低于某些值的数进行截断
.replace():是对某些值进行替换
.set_index():索引排序
.sort_values():值排序
【问题二】 value_counts会统计缺失值吗?
不会,value_counts只统计每个元素的数量,不统计缺失值
【问题三】 与idxmax和nlargest功能相反的是哪两组函数?
idxmax函数返回最大值,nlargest函数返回前几个大的元素值
功能相反的函数:idxmin:返回最小值,nsmallest:返回前几个大的元素值
【问题四】 在常用函数一节中,由于一些函数的功能比较简单,因此没有列入,现在将它们列在下面,请分别说明它们的用途并尝试使用。
sum/mean/median/mad/min/max/abs/std/var/quantile/cummax/cumsum/cumprod
sum():对行/列求和
mean():求平均值
median():求中位数
mad():根据平均值计算平均绝对利差
min()/max():最小值/最大值
abs():求绝对值
std():求标准差
var():求方差
quantile():求分位数
cummax():求累积最大值
cumsum():求累加和
cumprod():求累积乘积
【问题五】 df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?第一问提到的函数也有axis参数吗?怎么使用?
axis=1:对行操作,axis=0:对列操作
练习
【练习一】 现有一份关于美剧《权力的游戏》剧本的数据集,请解决以下问题:
(a)在所有的数据中,一共出现了多少人物?
import pandas as pd
#从文件读取数据
df=pd.read_csv('C:\\Users\\74765\\Desktop\\joyful-pandas\\data\\Game_of_Thrones_Script.csv')
num_charactors=df['Name'].value_counts().size #求一共出现多少人物
(b)以单元格计数(即简单把一个单元格视作一句),谁说了最多的话?
one_maxwords=df['Name'].value_counts().idxmax() #求谁说了最多的话
(c)以单词计数,谁说了最多的单词?
for index in df.index:#统计每句台词的单词数
words=df.loc[index,'Sentence']#提取台词
nwords=words.split(" ")#按空格分离单词
df.loc[index,'nwords']=len(nwords)#新建一列,存入对应台词的单词数
bool_list=df.duplicated(subset='Name')#判断是否人物是否重复,未重复为false,重复为true
df1=pd.Series(name='Name',index={0:num_charactors})#存放姓名,长度为人物总数
df2=pd.Series(name='nwords',index={0:num_charactors})#记录单词总数,与姓名对应
m=-1#索引
for index in df.index:
if bool_list[index]==False:#如果未重复,则记录姓名和单词数
m=m+1
df1[m]=df.loc[index,'Name']
df2[m]=df.loc[index,'nwords']
else:#如果重复,则在相应位置累加单词数
n=df1[df1.values==df.loc[index,'Name']].index #匹配姓名,返回索引
df2.loc[n]+=df.loc[index,'nwords']
one_maxnwords=df1[df2.idxmax()]