DataFrame的属性和用法:
创建:
pd.DataFrame(ndarray)
也可以使用字典的方式来创建DataFrame
添加行列索引:
pd.DataFrame(ndarray,index,columns)
index输入为列表作为行索引的值
属性:
shape,index,columns,values,T
方法:
返回前N行(默认为5)
head(N)
返回后N行(默认为5)
tail(N)
DataFrame索引的设置:
1)修改行列索引值:
行列索引值不能单独修改,只能进行整行或者整列的修改。
2)重设索引:
reset_index(drop=False)
设置新的下标索引
drop:默认为False,不删除原来的所以,如果为True,删除原来的索引
3)设置新索引:
set_index(keys,drop=True)
keys:可以为值也可以为列表,为列表时会产生Multindex
查看索引的方法:DataFrame.index
可以查看索引的名字和值:DataFrame.index.names
DataFrame.index.levels
Panel:DataFrame的容器(弃用)
items -axis 0,每个项目对应于内部包含的数据帧(DataFrame)
major_axis -axis 1,它是每个数据帧(DataFrame)的索引(行)
minor_axis -axis 2,它是每个数据帧(DataFrame)的列
Series:带索引的一维数组
属性:
index,values
创建:
pd.Series(ndarray)
指定内容,默认索引
pd.Series(ndarray,index)
指定内容,指定索引
pd.Series({"red":100,"blue":200,"green":500,"yellow":1000})
通过字典数据创建
基本数据操作:
ndarray.drop(list,axis)
list:为指定需要删除的索引值
axis:0为行,1位列
索引操作:
①直接索引
先列后行,先写列索引后写行索引
②按名字索引
ndarray.loc["2018-02-06"]["open"]
ndarray.loc["2018-02-06","open"]
③按数字索引
ndarray.iloc[1,0]
④组合索引
ndarray.ix[0:4,["open","close","high",""low]]
返回值对应的索引:
ndarray.columns.get_indexer(["open","close","high","low"])
赋值操作:
通过上面的索引操作直接对索引的位置进行赋值。
排序操作:
①按照内容进行排序:
DataFrame:
df.sort_values(key,ascending=True)
key:单个键或者多个键进行排序
ascending=False:降序
ascending=True:升序
Series:
sr.sort_values(ascending=False)
②按照索引进行排序:
DataFrame:
df.sort_index()
按照索引进行从小到大的排序
Series:
sr.sort_index()
按照索引进行从小到大的排序
DataFrame运算:
1)算数运算:
①直接使用符号作用于每一行
②使用ndarray.add()和ndarray.sub()方法进行加减操作
可以直接对两行进行操作
2)逻辑运算:
①可以使用逻辑运算符直接作用于每一行
②逻辑运算函数:
query(expr)
expr:查询字符串
isin(values)
values:判断值是否存在
3)统计运算:
DataFrame.describe()
返回几种常用的属性
sum,mean,median,min,max,mode,abs,prod,std,var,idxmax,idxmin
可以直接使用DataFrame.的方式获取对应的属性
4)累计统计运算:
cumsum 计算前1,2,3,.....n个数的和
cummax 计算前1,2,3,.....n个数的最大值
cummin 计算前1,2,3,.....n个数的最小值
cumprod 计算前1,2,3,.....n个数的积
5)自定义运算:
apply(func,axis=0)
func:自定义函数,使用lambda匿名函数
axis=0:默认为列,axis=1:行进行运算
Pandas画图:
DataFrame.plot(x=None,y=None,kind="line",stacked=False)
x:特征值,y:标签值
kind:绘图类型
line,bar,barh,hist,pie,scatter
stacked:是否将图像进行堆叠
Pandas文件操作:
1)scv文件操作:
①读取csv文件:
pandas.read_csv(path,sep=",",delimiter=None)
path:文件路径
usecols:指定需要的字段,可以为单个也可以为列表
names:可以传入列表,作为读取文件的字段
②存储csv文件:
DataFrame.to_csv(path,sep=",",columns=None,header=True,index=True,index_label=None,mode="w",encoding=None)
path:文件路径
columns:保存的列的索引
index:是否保存行索引
header:是否保存列索引
2)hdf5文件操作:
①读取hdf5文件:
hdf5文件相当于3维文件,每一个key对应的是一个DataFrame
pandas.read_hdf(path,key=None,**kwargs)
path:文件路径
key:读取的键
mode:打开文件的模式
②存储hdf5文件:
DataFrame.to_hdf(path,key,**kwargs)
path:文件路径
key:对应的key值
key值不同,可以多次存储hdf5文件
3)JSON文件操作:
①读取JSON文件:
pandas.read_json(path,orient,type="frame",lines=False)
path:文件路径
orient:一般使用“records”,符合一般的格式
lines:是否把一行作为一个样本
②存储JSON文件:
DataFrame.to_json(path,orient,lines)
path:文件路径
orient:一般使用“records”,符合一般的格式
lines:是否把一行作为一个样本
缺失值的处理:
1)如何处理nan
判断是否存在缺失值:
pd.isnull(DataFrame)
pd.notnull(DataFrame)
①删除存在缺失值的样本:
dropna(axis="rows",inpalce=False)
axis:默认按行修改数据
inplace:是否替换数据,为True时,在原始数据上进行修改,为False时,返回另外的数据值,不改变原数据
②替换缺失值:
fillna(value,inplace=True)
value:替换成的值
inplace:是否替换数据,为True时,在原始数据上进行修改,为False时,返回另外的数据值,不改变原数据
缺失值不为nan时,需要先将缺失值转换为nan,再进行处理。
DataFrame.replace(to_replace=,value=)
to_replace:替换之前的值
value:替换之后的值
数据离散化:
1)对数据进行分组:
①自动分组:pd.qcut(data,bins)
data:分组的数据
bins:要分的组数
返回series值
②自定义分组:pd.cut(data,bins)
data:分组的数据
bins:要分的组按照列表的方式进行输入
返回series值
2)将分好的组的结果转换为哑变量(one-hot编码)
pd.get_dummies(series,prefix)
series:输入分组好的series值,prefix为分组的名字
合并处理:
1)按方向进行拼接
pd.concat([data1,data2],axis=1)
按照行或者列进行合并,axis=0为行索引,axis=1为行索引
2)按索引进行拼接
pd.merge(left,right,how="inner",on=[索引])
inner:相同的保留
left:左边的保留
right:右边的保留
outer:全部都保留
交叉表和透视表:
1)交叉表(用于寻找两列之间的关系):
pd.crosstab(value1,value2)
传入值为两列,返回两列的对应关系
pandas日期类型(转换为DatetimeIndex):
pd.to_datetime
DatetimeIndex数据的属性:
year,month,weekday
2)透视表:
DataFrame.pivot_table([],index=[])
前面输入需要查看的数据列,后面提供索引
分组与聚合:
DataFrame.groupby(by,as_index=False)
by:分组的列数据,可以为多个
Series.groupby(DataFrame[])
传入对应的列,按照该列进行分组与聚合