pandas 总结

1
2
3
4
5
6
import pandas as pd
catering_sale = '../data/chapter3/demo/data/catering_sale.xls' # 餐饮数据
data = pd.read_excel(catering_sale, index_col = '日期') # 读取数据,指定“日期”列为索引列

print(data.describe()) # describe() 函数 查看数据的基本情况
print(len(data)) # count 是非空值数, len(data) 数据记录数: 201 条,因此缺失值数为1

简介

3种数据类型:

  • DataFrame
  • Series

数据预处理

值计数

1
2
3
# 提取会员不同性别人数
male = pd.value_counts(data['GENDER'])['男']
female = pd.value_counts(data['GENDER'])['女']

按列选行

1
2
# 挑选 商品类别 为 “非酒精饮料”
selected = sort_links.loc[sort_links['Types'] == '非酒精饮料']

读取数据

  • 读取Excel

基本统计量

1
2
3
4
5
statistics = data.describe()

statistics.loc['range'] = statistics.loc['max'] - statistics.loc['min'] # 极差
statistics.loc['var'] = statistics.loc['std'] / statistics.loc['mean'] # 变异系数
statistics.loc['dis'] = statistics.loc['75%'] - statistics.loc['25%'] # 四分位数间距
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
catering_sale = '../data/chapter3/demo/data/catering_sale.xls'  # 餐饮数据
data = pd.read_excel(catering_sale, index_col = '日期') # 读取数据,指定“日期”列为索引列

print(data.describe()) # describe() 函数 查看数据的基本情况
print(len(data)) # count 是非空值数, len(data) 数据记录数: 201 条,因此缺失值数为1

销量
count 200.000000
mean 2755.214700
std 751.029772
min 22.000000
25% 2451.975000
50% 2655.850000
75% 3026.125000
max 9106.440000
201

mean 平均值 std 标准差

1/4 25%

50% 中位数

25% 上四分位点

75% 下四分位点

画图

箱型图

1
2
plt.figure()
p = data.boxplot(return_type = 'dict') # 画箱型图,直接使用 DataFrame 的方法

其他

设置x轴刻度间隔

1
2
3
x_major_locator = plt.MultipleLocator(7)
ax = plt.gca()
ax.xaxis.set_major_locator(x_major_locator)

统计特征函数

  • 统计特征函数 用于 计算数据的 均值、方差、标准差、分位数、相关系数、协方差等,这些统计特征能反应 数据的整体趋势。

    1. sum() 计算数据样本的 总和(按列计算)

    使用:D.sum()
    样本 D 可为 DataFrame 或 Series

    1. mean() 算术平均数

    使用:D.mean()
    样本 D 可为 DataFrame 或 Series

    1. var() 方差

    使用:D.var()
    样本 D 可为 DataFrame 或 Series

    1. std() 标准差

    使用:D.std()
    样本 D 可为 DataFrame 或 Series

    1. corr() Spearman(Pearson) 相关系数矩阵

    使用:D.corr(method = 'pearson')
    样本 D 可为 DataFrame,返回相关系数矩阵,method 为计算方法,支持 pearson(默认)、kendall、spearman

    S1.corr(S2, method = 'pearson') S1、S2 均为 Series,这种格式指定计算两个Series间的相关系数

    1. cov() 协方差矩阵

    使用:D.cov()
    样本D 可为 DataFrame
    S1.cov(S2, method = 'pearson') S1、S2 均为 Series,这种格式指定计算两个Series间的协方差

    1. skew() 样本值的偏度(三阶矩)
    1. kurt() 样本值的峰度(四阶矩)
    1. describe() 给出样本的基本描述(基本统计量加均值、标准差等)

统计特征函数 - 实例

计算 6*5 随机矩阵的协方差矩阵
1
2
3
4
5
6
7
import pandas as pd
import numpy as np

np.random.seed(0)
D = pd.dataFrame(np.random.randn(6, 5)) # 产生 6*5 随机矩阵
print(D.cov()) # 计算协方差矩阵
print(D[0].cov(D[1])) # 计算第一列和第二列的协方差

统计特征函数 - 累积计算(cum)

  • cumsum() 依次给出前 1、2、...、n 个数的和

  • cumprod() 依次给出前 1、2、...、n 个数的积

  • cummax() 依次给出前 1、2、...、n 个数的最大值

  • cummin() 依次给出前 1、2、...、n 个数的最小值

统计特征函数 - 滚动计算(pd.rolling)

  • rolling_sum() 总和(按列计算)

  • rolling_mean() 算术平均数

  • rolling_var() 方差

  • rolling_std() 标准差

  • rolling_corr() Spearman(Pearson)相关系数矩阵

  • rolling_cov() 协方差矩阵

  • rolling_skew() 偏度(三阶矩)

  • rolling_kurt() 峰度(四阶矩)

PS

  • cum 系列函数 是 DataFrame/Series 对象方法,而 rolling_ 系列是 pandas 函数,不是 DataFrame/Series 对象方法,使用格式:D.rolling(k).mean(),意思是 每 k 列 计算一次均值,滚动计算

读取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
datafile = '../data/chapter7/demo/data/air_data.csv'  # 航空原始数据,第一行为属性标签

# 读取原始数据,指定 UTF-8 编码(需要用文本编辑器将数据转换为 UTF-8 编码)
data = pd.read_csv(datafile, encoding='utf-8')

# 包括对数据的基本描述,percentiles 参数是指定计算多少的分位数表(如 1/4 分位数、中位数等)
explore = data.describe(percentiles = [], include = 'all').T

# describe() 函数自动计算 非空值数,需要手动计算空值数
explore['null'] = len(data) - explore['count']

explore = explore[['null', 'max', 'min']] # 最后只有 ['null', 'max', 'min'] 这3列
explore.columns = [u'空值数', u'最大值', u'最小值'] # 表头重命名

describe() 函数 自动计算的字段有 count(非空值数)、unique(唯一值数)、top(频数最高者)、freg(最高频数)、mean(平均值)、std(方差)、min(最小值)、50%(中位数)、max(最大值)

1
2
# 指定 sheet 为 Sheet1
df = pd.read_excel(r'超市营业额.xlsx', sheet_name="Sheet1")

DataFrame

删除某一列,返回被删除的列

可以使用这个来删除某一列(不能是多列),只有一个参数,就是列名,可以是str类型,函数返回的是被删除的列,df直接是删除后的df,不需要我们处理

我们建模时,需要单独保留某个特征,比如y值,我们就可以用y=xx.pop(label)了,很实用。

1
df.pop('class')

常见问题

1. Excel 打开 csv 中文乱码

原因: Excel 会读取 BOM 来确定编码,无BOM 一律按 unicode或者 系统默认字符集

解决: 使用 UTF-8-BOM 编码 重新保存csv (转换为带BOM 编码就好)

参考: csv 文件打开乱码,有哪些方法可以解决?