pandas学习


前言

pandas的学习开始了。开始学习的肯定是pandas中的基础函数与它们各自的用法,太多了,我们也就提出其中值得注意的点就行。


一、pandas是什么?

series 和 dataframe之间有什么区别呢?
Series是一种类似于一维数组的对象。它由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。

obj = pd.Series([4, 7, -5, 3])
print(obj)

'''
0    4
1    7
2   -5
3    3
dtype: int64
'''

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame既有行索引也有列索引,它可以被看做由Series组成的字典(共同用一个索引)。

obj1 = pd.DataFrame([4, 7, -5, 3])
print(obj1)

'''
   0
0  4
1  7
2 -5
3  3
'''

我们常常使用的是DataFrame,因为它能很好地生成行列都有序列的“表格”,这样有助于我们的查看。

1、索引值对齐
这个功能可以通过索引来对对应的数值进行操作,例如:

df1 = pd.DataFrame({'a':[1, 2, 3]}, index=[1, 2, 3])
df2 = pd.DataFrame({'a':[1, 2, 3]}, index=[2, 1, 3])
print(df1-df2)

'''
   a
1 -1
2  1
3  0
'''

增加新的列,可以使用assign方法

df = pd.DataFrame({'col1':list('abqeqwedsa'), 'col2':range(5, 15), 'col3':[1, 2, 3, 4, 5, 6, 4, 7, 8, 7]})
df2 = df.assign(col4 = pd.Series(list('qweer')))
print(df2)

'''
  col1  col2  col3 col4
0    a     5     1    q
1    b     6     2    w
2    q     7     3    e
3    e     8     4    e
4    q     9     5    r
5    w    10     6  NaN
6    e    11     4  NaN
7    d    12     7  NaN
8    s    13     8  NaN
9    a    14     7  NaN
'''

这里为什么会出现 ‘NaN’ 呢?因为索引值并不对齐,在第四列的单元中,只有前面5个值,没有后面的5个值,所以后面的值智能显示 ‘NaN’


我们是不是经常能看见head()这个跟屁虫跟在代码的后面,那这个跟屁虫到底有什么用呢?
如果我们的表格中有大量的数据,每次都将所有的数据都打印出来,是不是很麻烦呢,这时候head()就来了,它能够只显示前面5行的数据,这样有助于缩小我们的数据量。如果你并不想显示前面5行数据,显示6行,偏偏要多一行,那就在括号里,“看什么?6,你和我,走一波,兄弟”。

df = pd.DataFrame({'col1':list('abqeqwedsa'), 'col2':range(5, 15), 'col3':[1, 2, 3, 4, 5, 6, 4, 7, 8, 7]})

print(df.head(6))

'''
  col1  col2  col3
0    a     5     1
1    b     6     2
2    q     7     3
3    e     8     4
4    q     9     5
5    w    10     6

进程已结束,退出代码0

'''

问题和习题

问题

1、Series和DataFrame有哪些常见属性和方法?


2、value_counts会统计缺失值吗?
答:不会,因为这是统计所有元素的个数


3、 如果有多个索引同时取到最大值,idxmax会返回所有这些索引吗?如果不会,那么怎么返回这些索引?
答:不会,他会返回第一个最大值的索引值。

df = pd.DataFrame({'col1':list('abqeqwedsa'), 'col2':range(5, 15), 'col3':[1, 8, 3, 4, 5, 6, 4, 7, 8, 8]})

print(df['col3'].idxmax())  	# 1

4、在常用函数一节中,由于一些函数的功能比较简单,因此没有列入,现在将它们列在下面,请分别说明它们的用途并尝试使用。
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:按顺序连乘


5、df.mean(axis=1)是什么意思?它与df.mean()的结果一样吗?问题四提到的函数也有axis参数吗?怎么使用?
答:df.mean(axis=1)计算行的平均值,df.mean()计算列的平均值,axis=0表示列,axis=1表示行,其默认值为0


6、对值进行排序后,相同的值次序由什么决定?
答:多个值排序,即先对第一层排,在第一层相同的情况下对第二层排序。


7、Pandas中为各类基础运算也定义了函数,比如s1.add(s2)表示两个Series相加,但既然已经有了’+’,是不是多此一举?
答:add()包含 fill_value 参数, 可以填充缺失值然后再相加


8、如果DataFrame某一列的元素是numpy数组,那么将其保存到csv在读取后就会变成字符串,怎么解决?
答:df[‘列名’] = df[‘列名’].astype(np.float32)


习题

1、现有一份关于美剧《权力的游戏》剧本的数据集,请解决以下问题:
(a)在所有的数据中,一共出现了多少人物?
(b)以单元格计数(即简单把一个单元格视作一句),谁说了最多的话?
(c)以单词计数,谁说了最多的单词?(不是单句单词最多,是指每人说过单词的总数最多,为了简便,只以空格为单词分界点,不考虑其他情况)

df = pd.read_csv(r'D:\pycharm\学习\joyful-pandas-master\data\Game_of_Thrones_Script.csv')

print(df['Name'].nunique())

print(df['Name'].value_counts().nlargest(1))

'''
564

tyrion lannister    1760
Name: Name, dtype: int64
'''


2、现有一份关于科比的投篮数据集,请解决如下问题:
(a)哪种action_type和combined_shot_type的组合是最多的?
(b)在所有被记录的game_id中,遭遇到最多的opponent是一个支?(由于一场比赛会有许多次投篮,但对阵的对手只有一个,本题相当于问科比和哪个队交锋次数最多)

在这里插入图片描述

data = pd.read_csv(
    'https://labfile.oss.aliyuncs.com/courses/1283/adult.data.csv')
print(data.head())
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值