Pandas

文章目录

  • 1.什么是Pandas
  • 2.Pandas的数据结构
      • 2.1 Series
          • 2.1.1 Series的创建:
          • 2.1.2 Series的属性
      • 2.2 DataFrame
          • 2.2.1 DataFrame的创建
          • 2.2.2 DataFrame的属性
      • 2.3 DataFrame索引设置
  • 3.MultiIndex与Panel
      • 3.1 MultiIndex创建
  • 4.Pandas基本数据操作
      • 4.1 直接使用行列索引
      • 4.2 结合loc或者iloc使用索引
      • 4.3 赋值操作
      • 4.4 排序
          • 4.4.1 DataFrame排序
          • 4.4.2 Series排序
  • 5.DataFrame运算
      • 5.1 算术运算
      • 5.2 逻辑运算
      • 5.3 逻辑运算函数
      • 5.4 统计运算
          • 5.4.1 describe
          • 5.4.2 统计函数
          • 5.4.3 累计统计函数
  • 6.自定义运算

1.什么是Pandas

Pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。 Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
Pandas_第1张图片
Pandas特点:
1.专门用于数据挖掘的开源python库
2.以Numpy为基础,借力Numpy模块在计算方面性能高的优势
3.基于matplotlib,能够简便的画图
4.独特的数据结构

2.Pandas的数据结构

Pandas中一共有三种数据结构,分别为:Series、DataFrame和MultiIndex(老版本中叫Panel )。 其中Series是一维数据结构,DataFrame是二维的表格型数据结构,MultiIndex是三维的数据结构。

2.1 Series

Series是一个类似于一维数组的数据结构,它能够保存任何类型的数据,比如整数、字符串、浮点数等,主要由一组数据和与之相关的索引两
部分构成。Pandas_第2张图片

2.1.1 Series的创建:
# 导入pandas
import pandas as pd
pd.Series(data=None, index=None, dtype=None)

参数:
data:传入的数据,可以是ndarray、list等
index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
dtype:数据的类型

创建Series,默认索引

import pandas as pd
import numpy as np
pd.Series(np.arange(10))

Pandas_第3张图片
创建Series,指定索引

pd.Series([6,3,2],index=[1,2,3])

Pandas_第4张图片
通过字典数据创建

import pandas as pd
import numpy as np
dic=pd.Series({'one':1,'two':2,'three':3})
dic

Pandas_第5张图片
字典的key就默认为Series的索引。

2.1.2 Series的属性

Series中提供了两个属性为index和values

index是查看Series数组的索引

dic.index

在这里插入图片描述
values是查看Series数组的值

dic.values

在这里插入图片描述
也可以使用索引来获取值
Pandas_第6张图片

2.2 DataFrame

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
Pandas_第7张图片

2.2.1 DataFrame的创建
# 导入pandas
import pandas as pd
pd.DataFrame(data=None, index=None, columns=None)

参数:
index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。

默认索引

import pandas as pd
import numpy as np
dic=pd.DataFrame(np.random.randn(3,4))
dic

Pandas_第8张图片
指定索引

import pandas as pd
import numpy as np
dic=np.random.randn(3,4)
subjects=["指数1","指数2","指数3","指数4"]
stu=[11,22,33]
dic=pd.DataFrame(dic,columns=subjects,index=stu)
dic

Pandas_第9张图片

2.2.2 DataFrame的属性

shape
显示该数组的维度
index
显示该数组行索引列表

dic.index

在这里插入图片描述
columns
显示列索引列表

dic.columns

在这里插入图片描述

values
显示数组的值

dic.values

在这里插入图片描述

head
显示数组的前几行,默认为前五行

dic.head

在这里插入图片描述

tail
显示数组的后几行

# 显示数组的后两行
dic.tail(2)

Pandas_第10张图片

2.3 DataFrame索引设置

在修改行列索引值的时候,必须要整行整列的修改,否则会报错。

重置索引

reset_index(drop=False) 设置新的下标索引
drop:默认为False,不删除原来索引,如果为True,删除原来的索引值

以某列值设置为新的索引

set_index(keys, drop=True)
keys : 行索引名称或者列索引名称的列表
drop : boolean,
default True.当做新的索引,删除原来的列

import pandas as pd
import numpy as np
df=pd.DataFrame({'month': [1, 4, 7, 10],
'year': [2012, 2014, 2013, 2014],
'sale':[55, 40, 84, 31]})
df.set_index('month')
df = df.set_index(['year', 'month'])
df

Pandas_第11张图片

3.MultiIndex与Panel

MultiIndex是三维的数据结构;
多级索引(也称层次化索引)是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引。

3.1 MultiIndex创建

index属性
names:levels的名称,所有索引列的名称
levels:每个level的元组值

import pandas as pd

arrays = [[1, 1, 2, 2], ['red', 'blue', 'red', 'blue']]
pd.MultiIndex.from_arrays(arrays, names=('number', 'color'))

Pandas_第12张图片

4.Pandas基本数据操作

读取数据read_csv
删除数据drop
axis=0代表行,axis=1代表列

import pandas as pd
data=pd.read_csv("./day03/2.code/data/stock_day.csv")
data=data.drop(["ma5","ma10","ma20","v_ma5","v_ma10","v_ma20"],axis=1)
data

Pandas_第13张图片

4.1 直接使用行列索引

先列后行

需求:获取2018-02-14 这天的close的数据

data['close']['2018-02-14']

在这里插入图片描述
注意:这里索引的顺序是先列后行

4.2 结合loc或者iloc使用索引

在pandas中,loc和iloc是两个重要的索引器,用于在DataFrame中进行数据选择和操作。它们允许您基于标签(loc)或基于整数位置(iloc)访问特定的行和列。
loc – 先行后列,是需要通过索引的字符串进行获取
iloc – 先行后列,是通过下标进行索引

loc:
loc是基于标签的索引,意味着可以使用它来使用行和列标签访问数据。
它接受两个参数,用逗号分隔:df.loc[行标签, 列标签]。
可以传递单个标签、标签列表或切片来选择特定的行或列。
使用loc时,切片中的结束索引是包含在内的,不同于iloc。
iloc:
iloc是基于整数的索引,意味着可以使用它来使用行和列的整数位置访问数据。
它接受两个参数,用逗号分隔:df.iloc[行位置, 列位置]。
可以传递单个整数、整数列表或切片来选择特定的行或列。
使用iloc时,切片中的结束索引是不包含在内的,这意味着不包括最后一个索引。

需求:获取从’2018-02-27’:‘2018-02-22’,'open’的结果

data.loc['2018-02-27':'2018-02-22', 'open']

Pandas_第14张图片
需求: 获取前3天数据,前5列的结果

# 使用iloc可以通过索引的下标去获取
data.iloc[:3, :5]

Pandas_第15张图片

4.3 赋值操作

对DataFrame中的close列进行重新赋值为1

# 直接修改原来的值
data['close'] = 1
# 或者
data.close = 1

4.4 排序

排序有两种形式,一种对于索引进行排序,一种对于内容进行排序

4.4.1 DataFrame排序

对内容排序:sort_values(by=, ascending=)

使用df.sort_values(by=, ascending=) 单个键或者多个键进行排序
参数:
by:指定排序参考的键
ascending:默认升序 ascending=False:降序 ascending=True:升序

import pandas as pd

# 读取数据和处理
read_res=pd.read_csv("./day03/2.code/data/stock_day.csv")
data=read_res.drop(['ma5','ma10','ma20','v_ma5','v_ma10','v_ma20'],axis=1)

#按照open进行升序排序
data.sort_values(by='open',ascending=True).head()

Pandas_第16张图片

# 按照多个键进行排序
data.sort_values(by=["open","close"])

Pandas_第17张图片
对索引排序:sort_index

data.sort_index()

Pandas_第18张图片

4.4.2 Series排序

对内容进行排序,因为只有一列数据,sort_values方法不需要参数

data['p_change'].sort_values(ascending=True)

Pandas_第19张图片
对索引进行排序:sort_index

data['p_change'].sort_index()

Pandas_第20张图片

5.DataFrame运算

5.1 算术运算

加 add(other)

data['open'].add(1)

Pandas_第21张图片
减 sub(other)

5.2 逻辑运算

例如筛选data[“open”] > 23的日期数据
Pandas_第22张图片

5.3 逻辑运算函数

query(expr)
expr:查询字符串

data.query("open<24 & open>23").head()

Pandas_第23张图片

isin(values)
可以指定值进行一个判断,从而进行筛选操作

# 找出open值是23.53和23.85的数据
data["open"].isin([23.53, 23.85])

Pandas_第24张图片

5.4 统计运算

5.4.1 describe

综合分析: 能够直接得出很多统计结果, count , mean , std , min , max 等

data.describe()

Pandas_第25张图片

5.4.2 统计函数

Numpy当中已经详细介绍,在这里我们演示min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差),mode(众数)结果:
Pandas_第26张图片
对于单个函数去进行统计的时候,坐标轴还是按照默认列“columns” (axis=0, default),如果要对行“index” 需要指定(axis=1)

# 使用统计函数:0 代表列求结果, 1 代表行求统计结果
data.max(0)

Pandas_第27张图片

5.4.3 累计统计函数

Pandas_第28张图片

# 累加求和
data['p_change'].cumsum()

Pandas_第29张图片
结合matplotlib将累加过程更好的显示

import matplotlib.pyplot as plt
#绘制画布
plt.figure(figsize=(20,6),dpi=100)
# 画图
data['p_change'].cumsum().plot()
# 显示
plt.show()

Pandas_第30张图片

6.自定义运算

pandas中通过apply方法来实现用户自定义运算

apply(func, axis=0)
func:自定义函数
axis=0:默认是列,axis=1为行进行运算

# 自定义运算,求open列和close列的最大值减去最小值的结果
data[['open', 'close']].apply(lambda x: x.max() - x.min(), axis=0)

在这里插入图片描述

你可能感兴趣的:(python,python,pandas,开发语言)