Pandas 是基于NumPy 的一种工具,该工具是为解决数据分析任务而创建的。 Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
Pandas特点:
1.专门用于数据挖掘的开源python库
2.以Numpy为基础,借力Numpy模块在计算方面性能高的优势
3.基于matplotlib,能够简便的画图
4.独特的数据结构
Pandas中一共有三种数据结构,分别为:Series、DataFrame和MultiIndex(老版本中叫Panel )。 其中Series是一维数据结构,DataFrame是二维的表格型数据结构,MultiIndex是三维的数据结构。
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))
pd.Series([6,3,2],index=[1,2,3])
import pandas as pd
import numpy as np
dic=pd.Series({'one':1,'two':2,'three':3})
dic
Series中提供了两个属性为index和values
index是查看Series数组的索引
dic.index
dic.values
DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1
# 导入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
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
shape
显示该数组的维度
index
显示该数组行索引列表
dic.index
dic.columns
values
显示数组的值
dic.values
head
显示数组的前几行,默认为前五行
dic.head
tail
显示数组的后几行
# 显示数组的后两行
dic.tail(2)
在修改行列索引值的时候,必须要整行整列的修改,否则会报错。
重置索引
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
MultiIndex是三维的数据结构;
多级索引(也称层次化索引)是pandas的重要功能,可以在Series、DataFrame对象上拥有2个以及2个以上的索引。
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'))
读取数据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
先列后行
需求:获取2018-02-14 这天的close的数据
data['close']['2018-02-14']
在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']
# 使用iloc可以通过索引的下标去获取
data.iloc[:3, :5]
对DataFrame中的close列进行重新赋值为1
# 直接修改原来的值
data['close'] = 1
# 或者
data.close = 1
排序有两种形式,一种对于索引进行排序,一种对于内容进行排序
对内容排序: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()
# 按照多个键进行排序
data.sort_values(by=["open","close"])
data.sort_index()
对内容进行排序,因为只有一列数据,sort_values方法不需要参数
data['p_change'].sort_values(ascending=True)
data['p_change'].sort_index()
加 add(other)
data['open'].add(1)
query(expr)
expr:查询字符串
data.query("open<24 & open>23").head()
isin(values)
可以指定值进行一个判断,从而进行筛选操作
# 找出open值是23.53和23.85的数据
data["open"].isin([23.53, 23.85])
综合分析: 能够直接得出很多统计结果, count , mean , std , min , max 等
data.describe()
Numpy当中已经详细介绍,在这里我们演示min(最小值), max(最大值), mean(平均值), median(中位数), var(方差), std(标准差),mode(众数)结果:
对于单个函数去进行统计的时候,坐标轴还是按照默认列“columns” (axis=0, default),如果要对行“index” 需要指定(axis=1)
# 使用统计函数:0 代表列求结果, 1 代表行求统计结果
data.max(0)
# 累加求和
data['p_change'].cumsum()
import matplotlib.pyplot as plt
#绘制画布
plt.figure(figsize=(20,6),dpi=100)
# 画图
data['p_change'].cumsum().plot()
# 显示
plt.show()
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)