pandas基础
五、问题与练习
1. 问题
【问题一】 Series和DataFrame有哪些常见属性和方法?
{‘Series’:{‘Attribute’:[‘name’,‘values’,‘index’,‘dtype’],‘Method’:[‘mean’,‘max’,‘min’,‘std’,‘replace’]},‘DataFrame’:{‘Attribute’:[‘index’,‘columns’,‘values’,‘shape’],‘Method’:[‘mean’,‘idxmax’,‘agg’,‘describe’,‘head’,‘clip’,‘apply’]}}
【问题二】 value_counts会统计缺失值吗?
不会
【问题三】 与idxmax和nlargest功能相反的是哪两组函数?
idxmin, nminest
【问题四】 在常用函数一节中,由于一些函数的功能比较简单,因此没有列入,现在将它们列在下面,请分别说明它们的用途并尝试使用。
sum/mean/median/mad/min/max/abs/std/var/quantile/cummax/cumsum/cumprod
quantile疑惑: 数据排序取对应分位数, 但实测发现, 偏差了一位.例子:
df.Math.quantile(q = .1,interpolation = ‘lower’) 结果是33.8, 而不是32.7
经过助教老师讲解, 数值所对应的quantile, 是从0 开始排序后所对应的序数位置除以总数-1
举例来说, 如果 一共有 1,2,3,4,5 这几个数, 则5个数对应的quantile分别为 0, 25%, 50%, 75% ,100%, 最大值最小值分别对应0 与100%
这里可以直接通过quantile 默认的线性估值方式来验证…
【问题五】 df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?第一问提到的函数也有axis参数吗?怎么使用?
pd 里面, axis = 1 代表对每一行不同列进行操作, 比如df.mean()默认是对每一列求均值, 但加上axis = 1 后则表示对每一行求均值. 由于记忆起来比较绕, 个人习惯把axis = 1 理解成 一把剑把一行元素串起来, 而 axis = 0 则是一个鸡蛋自由落体, 因此把某一列的元素砸在一起.
2 练习
其中对权游角色台词统计
一开始想的是 split 与 groupby组合
先通过split 生成一列, 保存每一句话话的单次数
df_g[‘length’] = df_g[‘Sentence’].apply(lambda x:len(x.split()))
然后通过角色name的groupby 求和, 再获取最大值的索引
df_g.groupby(by = ‘Name’)[‘length’].sum().idxmax()
后来听说不能用split, 想到了 通过字符串直接转Series, 然后再统计Series 的空格数+1 得到 每句话的单词数, 再groupby
df_g[‘Sentence’].apply(lambda x: sum(pd.Series(list(x)) == ’ '))
由于多了一步series的转换, 效率比第一个方法低了好多
然后助教大大说还不能用groupby… 我只能想到for 循环了
就不再写出来了.