安装

1
2
# pip安装
pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
1
2
3
# 查看版本
import pandas as pd
pd.__version__

查看数据

数据地址:https://www.gairuo.com/file/data/dataset/team.xlsx

1
2
3
4
5
6
7
8
9
# 查看前5条,可以设置数字
df.head()

# 查看后5条,可以设置数字
df.tail()

# 随机查看5条
df.sample(5)

验证数据

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 查看行数和列数
df.shape 

# 查看索引、数据类型和内存信息
df.info()

# 查看数值型列的汇总统计
df.describe()

# 查看格字段类型
df.dtypes

# 显示数据行和列名
df.axes

# 列名
df.colums

建立索引

1
2
# 建立索引并生效
df.set_index('name',inplace=True)

数据选取

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 选取指定的列
df[['a','b']]
df.loc[:,['a','b']]

# x代表行,y代笔列 df.loc[x,y]

# 指定索引选取
df[df.index=='Ack']

# 自然索引选择,类似列表的切片
## 取前3行
df[0:3]

## 在前10个中每2个取1个
df[0:10:2]

## 前10个选取
df.iloc[0:10,:]

# 指定行和列
## 只看Ben的四个季度的成绩
df.loc['Ben','Q1':'Q4']
## 指定行区间
df.loc['Eorge':'Alexander','team':'Q4']

# 条件选择
## 单一条件
### Q1列大于90
df[df.Q1>90]
### tema列为'C'的
df[df.team=='C']

## 组合条件
### and关系
df[(df.Q1>90) & (df.team=='C')]
### 多重筛选
df[df['team']=='C'].loc[df.Q1>90]

排序

1
2
3
4
5
6
# 按Q1列数据升序排列
df.sort_values(by='Q1')
# 降序排列
df.sort_values(by='Q1',ascending=False)
# team升序,Q1降序
df.sort_values(['team','Q1'],ascending=[True,False])

分组聚合

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 按照团队分组对应列相加
df.groupby('team').sum()
# 求平均
df.groupby('team').mean()

# 不同列不同计算方式
df.groupby('team').agg(
    {
        'Q1':sum,     # 总和
        'Q2':'count', # 总数
        'Q3':'mean',  # 平均
        'Q4':'max'    # 最大值
    }   
)

数据转换

1
2
3
# 数据表的转置
# A-Q1、E-Q4两点连成的折线为轴对数据翻转
df.groupby('team').sum().T

增加列

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
# 增加一个固定值的列
df['one'] = 1

# 增加总成绩的列
df['total'] = df.Q1 + df.Q2 + df.Q3 + df.Q4

# 计算的值赋值与新列
df['total'] = df.loc[:,'Q1':'Q4'].apply(lambda x:sum(x),axis=1)
# 所有为数字的列相加
df['total'] = df.sum(axis=1)

# 增加平均成绩列
df['avg'] = df.total/4

统计分析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 返回所有列的均值
df.mean()

# 返回所有行的均值
df.mean(1)

# 返回列与列之间的相关系数
df.corr()

# 返回每一列中的非空值的个数
df.count()

# 返回每一列的最大值
df.max()

# 返回每一列的最小值
df.min()

# 返回每一列的中位数
df.median()

# 返回每一列的标准差
df.std()
# 方差
df.var()
# 众数
df.mode()

绘图

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
# 折线图
## Q1成绩的折线分布
df.['Q1'].plot()
## ben四个季度的成绩变化
df.loc['Ben','Q1':'Q4'].plot()
## 聚合后的总成绩折线图
df.groupby('team').sum().T.plot()

# 柱状图
## 柱状图
df.loc['Ben','Q1':'Q4'].plot.bar()
# 横向柱状图
df.loc['Ben','Q1':'Q4'].plot.barh()

# 饼图
## 各组人数对比
df.groupby('team').count().Q1.plot.pie()

导出

1
2
3
4
# 导出excel文件
df.to_excel('.xlsx')
# 导出csv文件
df.to_csv('.csv')

引用

内容摘自于书籍《深入浅出Pandas》