Pandas讲义
可以说是挺全面的了
我基本上把能找到的题涉及到的pandas知识点,以及我觉得非常非常可能要考的,全部罗列在这里,后期补充的话见
对象简介
代码的一般操作流程(一般的大题填空)
导入包,读取文件,处理一下,计算处理,绘图,保存
考的环节大概都是
1.读取的文件 2.计算过程中的函数名,参数,选择语句等
3.绘图中,大部分考画图的函数是啥,内容是啥
4.保存好像没怎么考过,但是见过。。。
In [117]:
import pandas as pd
df=pd.read_excel('tzjc.xlsx')
In [118]:
df
Out[118]:
姓名 | 性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|---|
0 | 张 | 男 | 1.70 | 60 | NaN | NaN |
1 | 李 | 男 | 1.75 | 70 | NaN | NaN |
2 | 王 | 男 | 1.80 | 85 | NaN | NaN |
3 | 卢 | 女 | 1.62 | 55 | NaN | NaN |
4 | 罗 | 女 | 1.58 | 50 | NaN | NaN |
5 | 赵 | 男 | 1.82 | 80 | NaN | NaN |
6 | 韩 | 女 | 1.67 | 49 | NaN | NaN |
什么时候加括号,什么时候不加括号?
这是一个最基本的问题,但却涉及了最根本的原则,
当我们print(df.index)的时候
有人知道,df和index分别是什么么?
df是一个对象,index是df这个对象的属性
同样道理,我们用df['身高'].max()
调用的是df['身高']对象的max方法
所以,归根到底就这么俩,属性,方法。。。
In [119]:
演示一下
df.index
Out[119]:
RangeIndex(start=0, stop=7, step=1)
In [120]:
df.values
Out[120]:
array([['张', '男', 1.7, 60, nan, nan],
['李', '男', 1.75, 70, nan, nan],
['王', '男', 1.8, 85, nan, nan],
['卢', '女', 1.62, 55, nan, nan],
['罗', '女', 1.58, 50, nan, nan],
['赵', '男', 1.82, 80, nan, nan],
['韩', '女', 1.67, 49, nan, nan]], dtype=object)
取值操作
其实我觉得这个不太会考,但是在学考卷有一题,所以还是得搞一下,毕竟那道题就用到了iloc 书上用到的是at,显示定位。
at显示定位一个
iat显示定位一个
loc显示切片
iloc隐式切片
In [121]:
df
Out[121]:
姓名 | 性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|---|
0 | 张 | 男 | 1.70 | 60 | NaN | NaN |
1 | 李 | 男 | 1.75 | 70 | NaN | NaN |
2 | 王 | 男 | 1.80 | 85 | NaN | NaN |
3 | 卢 | 女 | 1.62 | 55 | NaN | NaN |
4 | 罗 | 女 | 1.58 | 50 | NaN | NaN |
5 | 赵 | 男 | 1.82 | 80 | NaN | NaN |
6 | 韩 | 女 | 1.67 | 49 | NaN | NaN |
In [122]:
df.at[0,'性别']
Out[122]:
'男'
In [124]:
print(df.loc[0,'性别'])
print(df.loc[0:3,'性别'])
男
0 男
1 男
2 男
3 女
Name: 性别, dtype: object
In [125]:
print(df.iloc[0,1])
print(df.iloc[0:3,1])
男
0 男
1 男
2 男
Name: 性别, dtype: object
你发现了啥?
显示切片操作的时候,结尾切得到,隐式切片操作的时候,结尾取不到!!
In [126]:
df[0:2]#默认使用隐式切片,当索引为0123
Out[126]:
姓名 | 性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|---|
0 | 张 | 男 | 1.70 | 60 | NaN | NaN |
1 | 李 | 男 | 1.75 | 70 | NaN | NaN |
In [127]:
df.set_index('姓名')['张':'王']
Out[127]:
| | 性别 | 身高 | 体重 | bmi | result |
姓名 | |||||
---|---|---|---|---|---|
张 | 男 | 1.70 | 60 | NaN | NaN |
李 | 男 | 1.75 | 70 | NaN | NaN |
王 | 男 | 1.80 | 85 | NaN | NaN |
选择多列
In [128]:
df[['性别','姓名']]
Out[128]:
性别 | 姓名 | |
---|---|---|
0 | 男 | 张 |
1 | 男 | 李 |
2 | 男 | 王 |
3 | 女 | 卢 |
4 | 女 | 罗 |
5 | 男 | 赵 |
6 | 女 | 韩 |
关于axis
In [129]:
df[['身高','体重']]
Out[129]:
身高 | 体重 | |
---|---|---|
0 | 1.70 | 60 |
1 | 1.75 | 70 |
2 | 1.80 | 85 |
3 | 1.62 | 55 |
4 | 1.58 | 50 |
5 | 1.82 | 80 |
6 | 1.67 | 49 |
In [130]:
df[['身高','体重']].sum() #默认0,上下方向
Out[130]:
身高 11.94
体重 449.00
dtype: float64
In [131]:
df[['身高','体重']].sum(axis=1) #设置成1,左右方向
Out[131]:
0 61.70
1 71.75
2 86.80
3 56.62
4 51.58
5 81.82
6 50.67
dtype: float64
In [132]:
df.drop(0) #默认axis=0,上下方向所以是删行
Out[132]:
姓名 | 性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|---|
1 | 李 | 男 | 1.75 | 70 | NaN | NaN |
2 | 王 | 男 | 1.80 | 85 | NaN | NaN |
3 | 卢 | 女 | 1.62 | 55 | NaN | NaN |
4 | 罗 | 女 | 1.58 | 50 | NaN | NaN |
5 | 赵 | 男 | 1.82 | 80 | NaN | NaN |
6 | 韩 | 女 | 1.67 | 49 | NaN | NaN |
In [133]:
df.drop('姓名',axis=1) #axis=1,左右方向所以是删列
Out[133]:
性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|
0 | 男 | 1.70 | 60 | NaN | NaN |
1 | 男 | 1.75 | 70 | NaN | NaN |
2 | 男 | 1.80 | 85 | NaN | NaN |
3 | 女 | 1.62 | 55 | NaN | NaN |
4 | 女 | 1.58 | 50 | NaN | NaN |
5 | 男 | 1.82 | 80 | NaN | NaN |
6 | 女 | 1.67 | 49 | NaN | NaN |
拼接操作
In [134]:
df1=df.copy()
In [136]:
df.append(df1)
Out[136]:
姓名 | 性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|---|
0 | 张 | 男 | 1.70 | 60 | NaN | NaN |
1 | 李 | 男 | 1.75 | 70 | NaN | NaN |
2 | 王 | 男 | 1.80 | 85 | NaN | NaN |
3 | 卢 | 女 | 1.62 | 55 | NaN | NaN |
4 | 罗 | 女 | 1.58 | 50 | NaN | NaN |
5 | 赵 | 男 | 1.82 | 80 | NaN | NaN |
6 | 韩 | 女 | 1.67 | 49 | NaN | NaN |
0 | 张 | 男 | 1.70 | 60 | NaN | NaN |
1 | 李 | 男 | 1.75 | 70 | NaN | NaN |
2 | 王 | 男 | 1.80 | 85 | NaN | NaN |
3 | 卢 | 女 | 1.62 | 55 | NaN | NaN |
4 | 罗 | 女 | 1.58 | 50 | NaN | NaN |
5 | 赵 | 男 | 1.82 | 80 | NaN | NaN |
6 | 韩 | 女 | 1.67 | 49 | NaN | NaN |
In [137]:
pd.concat([df,df1],ignore_index=True)
Out[137]:
姓名 | 性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|---|
0 | 张 | 男 | 1.70 | 60 | NaN | NaN |
1 | 李 | 男 | 1.75 | 70 | NaN | NaN |
2 | 王 | 男 | 1.80 | 85 | NaN | NaN |
3 | 卢 | 女 | 1.62 | 55 | NaN | NaN |
4 | 罗 | 女 | 1.58 | 50 | NaN | NaN |
5 | 赵 | 男 | 1.82 | 80 | NaN | NaN |
6 | 韩 | 女 | 1.67 | 49 | NaN | NaN |
7 | 张 | 男 | 1.70 | 60 | NaN | NaN |
8 | 李 | 男 | 1.75 | 70 | NaN | NaN |
9 | 王 | 男 | 1.80 | 85 | NaN | NaN |
10 | 卢 | 女 | 1.62 | 55 | NaN | NaN |
11 | 罗 | 女 | 1.58 | 50 | NaN | NaN |
12 | 赵 | 男 | 1.82 | 80 | NaN | NaN |
13 | 韩 | 女 | 1.67 | 49 | NaN | NaN |
计算
In [138]:
df['bmi']=df.体重/df.身高**2
In [139]:
df
Out[139]:
姓名 | 性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|---|
0 | 张 | 男 | 1.70 | 60 | 20.761246 | NaN |
1 | 李 | 男 | 1.75 | 70 | 22.857143 | NaN |
2 | 王 | 男 | 1.80 | 85 | 26.234568 | NaN |
3 | 卢 | 女 | 1.62 | 55 | 20.957171 | NaN |
4 | 罗 | 女 | 1.58 | 50 | 20.028842 | NaN |
5 | 赵 | 男 | 1.82 | 80 | 24.151673 | NaN |
6 | 韩 | 女 | 1.67 | 49 | 17.569651 | NaN |
分组
In [140]:
df.groupby('性别')
Out[140]:
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x0000010DCD1D5080>
In [143]:
df.groupby('性别',as_index=False).mean()
Out[143]:
性别 | 身高 | 体重 | bmi | result | |
---|---|---|---|---|---|
0 | 女 | 1.623333 | 51.333333 | 19.518555 | NaN |
1 | 男 | 1.767500 | 73.750000 | 23.501157 | NaN |