# Pandas 核心处理方法

# 什么是 Pandas

Pandas 是一个基于 Python 的开源数据分析和数据处理库

它提供了两种核心数据结构:

数据结构 描述 类似于 索引 数据存储 类比
Series 一维带标签的数组 一列 单索引 同质化 Excel 单列
DataFrame 二维带标签的表格数据结构 一张表格(像 Excel 表) 双索引 各个列之间可以是不同的 整个 Excel 表格

应用场景:

  • 数据预处理(机器学习前)
  • 数据统计分析
  • 自动化报表
  • 数据可视化前处理

# Series

Series 就像这样:

Series Index Series Name
1 Series Values
2 Series Values
3 Series Values

# 创建方法

# series 的创建
import pandas as pd
s = pd.Series([1,2,3,4,5])
print(s)
# 自定义索引
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s)
# 定义 Name
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'], name='我是xxx')
print(s)

左侧是索引,右侧是值

0 1
1 2
2 3
3 4
4 5
dtype: int64

a 1
b 2
c 3
d 4
e 5
dtype: int64

a 1
b 2
c 3
d 4
e 5
Name: 我是 xxx, dtype: int64

# 通过字典方式来创建
s = pd.Series({'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5})
print(s)
# 通过 Series 对象来创建(截取)
s1=pd.Series(s,index=['a','c'])
print(s1)

# 基本属性

属性 说明 示例
index 行索引(标签)对象 s.index
values 数据值组成的 numpy 数组 s.values
dtype 数据类型 s.dtype
size 元素总个数 s.size
shape 数据结构的形状(长度,) s.shape
ndim 维度,Series 永远是 1 s.ndim
name Series 的名称(可自定义) s.name
is_unique 是否全是唯一值 s.is_unique
hasnans 是否含有缺失值(NaN) s.hasnans
# Series 对象属性
s = pd.Series([1, 2, 3, 4, 5], index=['a', 'b', 'c', 'd', 'e'])
print(s.values)
print(s.index)
print(s.name)
print(s.dtype)
print(s.size)
print(s.empty)
print(s.ndim)
print(s.shape)
print(s.is_unique)
print(s.loc['e'])  # 通过索引获取,显示索引
print(s.iloc[4])  # 通过位置获取,隐式索引
# 支持切片
print(s.loc['a':'d'])
print(s.iloc[0:3])

# 访问数据

print(s.iloc[2])
print(s['b'])
print(s[s < 3]) # 布尔索引
print(s.isin([1, 2, 3]))
print(s[s.isin([1, 2, 3])])
s = pd.Series([1, np.nan, 3, None, 5, 6, 7, 8, 9, 10], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'], name='testData')
s.head()
s.tail(2)

# 计算与常用统计方法

# 所有描述信息的语句
s.describe()
# 是否包含在其中
s.isin([1, 9, 3])
# 排序
s.sort_values()
# 分位数
s.quantile(0.5)
# 统计个数
s.value_counts()
# 众数
s.mode()

# Series 案例

创建一个包含十名学生数学成绩的 Series,成绩范围在 50 到 100 间,计算平均分、最高分、最低分、并找出高于平均分的学生人数。

print(scores.mean())
print(scores.max())
print(scores.min())
print(scores[scores.mean() < scores].count())

给定某城市一周每天的最高温度 Series,完成以下任务:

找出温度超过 30 度的天数

计算平均温度将温度从高到低排序

找出温度变化最大的两天

print(temperatures[temperatures > 30].count())
print(temperatures.sort_values(ascending=False))
temperatures.diff().abs().sort_values(ascending=False).head(2)

股票价格分析给定某股票连续 10 个交易日的收盘价 Series:

计算每日收益率 (当日收盘价 / 前日收盘价 - 1)

找出收益率最高和最低的日期

计算波动率 (收益率的标准差)

# 计算收益率 pct->percent 
price.pct_change()
a = price.pct_change()
a.idxmax()
price.pct_change().idxmin()
price.pct_change().std()

某产品过去 12 个月的销售量 Series:

计算季度平均销量 (每 3 个月为一个季度)

找出销量最高的月份

计算月环比增长率

找出连续增长超过 2 个月的月份

# resample->qs 按照季度开始重新采样
sales.resample('QS').mean()
sales.idxmax()
# 月百分比变化,即为环比
sales.pct_change()
# 环比大于零,使用滑动窗口,和为 3
pct_c = sales.pct_change()
b = pct_c > 0
b[b.rolling(window=3).sum() == 3].keys().tolist()

某商店每小时销售额 Series:

按天重采样计算每日总销售额

计算每天营业时间 (8:00-22:00) 和非营业时间的销售额比例

找出销售额最高的 3 个小时

hourly_sales.resample('D').sum()
# 两种方法
hourly_sales[(hourly_sales.index.hour>=8)&(hourly_sales.index.hour<=22)].sum()
hourly_sales.between_time('8:00', '22:00')
# 最终计算
hourly_sales[(hourly_sales.index.hour>=8)&(hourly_sales.index.hour<=22)].sum()/(hourly_sales.sum() - hourly_sales[(hourly_sales.index.hour>=8)&(hourly_sales.index.hour<=22)].sum())
# 可在全部的索引中去除营业索引
hourly_sales.drop(hourly_sales[(hourly_sales.index.hour>=8)&(hourly_sales.index.hour<=22)].index)
# 销售额最高的 3 个小时,两种方法
hourly_sales.sort_values(ascending=False).head(3)
hourly_sales.nlargest(3).keys()
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

KarryLiu 微信支付

微信支付

KarryLiu 支付宝

支付宝