本学习记录参考Joyful-Pandas
进行学习
pandas基础
知识点
问题与练习
1. 问题
【问题一】 Series和DataFrame有哪些常见属性和方法?
- Series
属性方法 | 说明 |
---|---|
s.values | 访问s的内容 |
s.index | 获取s的索引 |
s.iteritems() | 获取索引和值对 |
s.dtype | 获取s的数据类型 |
s[‘a’] | 根据索引访问元素 |
- DataFrame
属性方法 | 说明 |
---|---|
df.index | 访问行索引 |
df.columns | 访问列索引 |
df.values | 访问数据 |
df.shape | 获取df的数据形状 |
【问题二】 value_counts会统计缺失值吗?
不会,统计缺失值可以使用df['columns'].isnull().value_counts()
【问题三】 如果有多个索引同时取到最大值,idxmax会返回所有这些索引吗?如果不会,那么怎么返回这些索引?
不会,返回的是第一个最大值的索引;
可以使用maxindex = s[s==s.max()].index
【问题四】 在常用函数一节中,由于一些函数的功能比较简单,因此没有列入,现在将它们列在下面,请分别说明它们的用途并尝试使用。
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参数吗?怎么使用?
df.mean(axis=1)是df中行的平均值,df.mean()是列的平均值
【问题六】 对值进行排序后,相同的值次序由什么决定?
由索引决定
【问题七】 Pandas中为各类基础运算也定义了函数,比如s1.add(s2)表示两个Series相加,但既然已经有了'+',是不是多此一举?
add()包含 fill_value 参数, 可以填充缺失值然后再相加
【问题八】如果DataFrame某一列的元素是numpy数组,那么将其保存到csv在读取后就会变成字符串,怎么解决?
df['columns'] = df['columns'].astype(np.float32)
2. 练习
【练习一】 现有一份关于美剧《权力的游戏》剧本的数据集,请解决以下问题:
(a)在所有的数据中,一共出现了多少人物?
df = pd.read_csv('data/Game_of_Thrones_Script.csv')
df['Name'].nunique()
#564
(b)以单元格计数(即简单把一个单元格视作一句),谁说了最多的话?
df['Name'].value_counts()
'''
tyrion lannister 1760
jon snow 1133
daenerys targaryen 1048
cersei lannister 1005
jaime lannister 945
...
merry 1
nights watchmen 1
willem 1
greizhen 1
unsullied captain 1
Name: Name, Length: 564, dtype: int64
'''
(c)以单词计数,谁说了最多的单词?(不是单句单词最多,是指每人说过单词的总数最多,为了简便,只以空格为单词分界点,不考虑其他情况)
df['Sentence'].str.len().value_counts().idxmax()
#22
【练习二】现有一份关于科比的投篮数据集,请解决如下问题:
(a)哪种action_type和combined_shot_type的组合是最多的?
df = pd.read_csv('data/Kobe_data.csv',index_col='shot_id')
pd.Series(list(zip(df['action_type'],df['combined_shot_type']))).value_counts()
'''
(Jump Shot, Jump Shot) 18880
(Layup Shot, Layup) 2567
(Driving Layup Shot, Layup) 1978
........
(Driving Floating Bank Jump Shot, Jump Shot) 1
(Turnaround Fadeaway Bank Jump Shot, Jump Shot) 1
(Cutting Finger Roll Layup Shot, Layup) 1
dtype: int64
'''
(b)在所有被记录的game_id中,遭遇到最多的opponent是一个支?(由于一场比赛会有许多次投篮,但对阵的对手只有一个,本题相当于问科比和哪个队交锋次数最多)
df.groupby('game_id')['opponent'].unique().astype(str).value_counts()
'''
['SAS'] 91
['PHX'] 87
['UTA'] 84
['DEN'] 83
.........
['VAN'] 18
['NOP'] 16
['BKN'] 3
Name: opponent, dtype: int64
'''