Series、DataFrame和Multilndex(老版本叫Panel)
①Series一维数据结构
pd.Series(data=None,index=None,dtype=None)
data:可以是ndarray、list等
index:索引,默认0-N排列
dtype:数据的类型
创建方法三种:
一、pd.Series(np.arrage(9))
二、pd.Series([1.2,2.3, 3.4, 4.5],index=[1, 2, 3, 4])
三、pd.Series({“red”:10,”green”:20, ”blue”:100})
属性:
.index---获取索引
.values---获取值
②DataFrame二维表格型数据结构
pd.DataFrame(data=None,index=None,columns=None)
index、columns行列索引,默认0-N
创建过程:
1.构建行索引subjects=[‘语文’, ’数学’, ’英语’, ’物理’, ’化学’]
2.构建列索引stu=[‘同学’+str(i)for I in range DataFrame.shape[0]]
3.构建数据data= pd. DataFrame(data=score,index=stu,columns=subjects)
属性:
df.shape---显示行列数
df. index---显示行属性
df. columns---显示列属性
df.values---显示数据值
df.T---转置
df.head(x)---显示前几行,默认5
df.tail(x)---显示后几行,默认5
操作:
df.index=[‘year’,’month’,’sale’]---修改行列索引值,需要全局修改
df.reset_index(drop=False)---重设索引,drop表示是否删除原来索引
df.set_index(‘years’)设置单个索引
df.set_index([‘years’,’month’])设置多个索引
③Multilndex三维数据结构,即多级索引(也称层次化索引)
略。
读取文件pd.read_csv(‘./data.csv’)
删除行/列数据df.drop([‘a’,’b’,’c’],axis=1)
读取数据(直接索引)df[‘a’][‘b’]读取a列b行,先列后行
读取数据(值索引)df.loc[‘a’:’b’,‘c’:’d’]
读取数据(下标索引)df.iloc[a:b,c:d]
读取数据(混合索引,值或下标都可以)df.ix[a:b,‘c’:’d’]
一些取巧的操作:
data.loc[data.index[0:4],[“open”, ”close”, ”hight”, ”low”]]
data.iloc[0:4,data.columns.get_indexer([“open”, ”close”,”hight”, ”low”])]
赋值操作df [“a”]=1 <==> df.a=1
排序操作(值)df.sort_values(by=’keyword’,ascending=True)
by可以为[‘keyword1’,’keyword2’]多值索引
ascending为True(升序)或False(降序)
series.sort_values(ascending=True)对series排序
排序操作(索引)data.sort_index()
data['a'].add(b)---a列所有值加b,一般不会采用data['a']+b操作
data['a'].sub(b)---同理减法
data[data[’open’]>23 & data[’open’]<24] <=====> data.query(‘open<24& open>23’)
isin([valuesA, valuesB])---返回bool表示是否属于A和B之间
综合统计函数:
describe() |
计算出样本中的平均值、标准差、最大值、最小值 |
sum() |
求和 |
mean() |
求均值 |
median() |
求中位数 |
min() |
求最小值 |
max() |
求最大值 |
mode() |
求众数 |
abs() |
求绝对值 |
prod() |
求行或列乘积(axis=0 or 1,其他参数略) |
std() |
求标准差 |
var() |
求方差 |
idxmax() |
返回最大值索引(axis=0 or 1) |
idxmin() |
返回最小值索引(axis=0 or 1) |
累计统计函数
cumsum() |
计算前n个数的和 |
cummax() |
计算前n个数的最大值 |
cumin() |
计算前n个数的最小值 |
cumprod() |
计算前n个数的积 |
自定义函数
apply(func,axis=0) func---自定义函数名
例:data[['open','close']].apply(lambda x:x.max() - x.min(), axis=0)
pandas.DataFrame.plot(kind=' ')
kind:画图的种类
line---折线图
bar---柱状图
barh---柱状图横向
hist---直方图
pie---饼图
scatter---散点图
pandas.Series.plot(kind=' ')与DataFrame相同
pd.read_csv('./data.csv',usecols=['open','close'])---读取文件下指定列
pd.to_csv('./data.csv',sep=',',columns=None,header=True,index=True,mode='w',encoding=None)
sep---分隔符
columns---需要的列索引
header---bool,是否写进列索引值
index---是否写进索引
mode---‘w’重写;‘a’追加
encoding---编码方式
HDF5格式操作
HDF5文件的读取和存储需要指定一个键,值存储格式DataFrame,必须包含key
pd.read_hdf('./data.h5',key=' ')
pd.to_hdf(“./data.h5”,key=’ ’)
获取key的列表方法
kkk= h5py.File(add + 'h5test.h5', 'r').keys()
JSON格式操作
pandas.read_jason(filename,orient=None,type=’frame’,lines=False)
pandas.to_jason(filename,orient=None)
缺失值在pandas中标记为NaN,识别方式:
pd.isnull(df)
pd.notnull(df)
缺失值的处理:
1.删除数据:dropna()---不修改原数据,需要用一个变量接收
2.替换数据:data[‘AAA’].fillna(data[‘AAA’].mean(),inplace=True)
示范:for i inmove.columns:
ifnp.all(pd.notnull(movie[i])) == False:
movie[i].fillna(movie[i].mean(),inplace=True)
缺失值为’?’或其他标记,则进行替换
df.replace(to_replace=’?’,value=np.nan)
目的:减少连续属性值的个数,简化数据结构
分组分区:
分组:
qcut=pd.qcut(data,q)---对数据data分成q个组
qcut.value_counts()---计算分到每个组数据个数
自定义区间分组:
bins=[-100,-7, -5, -3, 0, 3, 5, 7, 100]
pd.cut(data, bins)
one-hot编码:pd.get_dummies(data,prefix=’rise’)---注意,传进去的数据不是原始数据,而是离散化后的数据
1.数据合并pd.concat([data1,data2],axis=1)
扩展:pd.concat(objs,axis=0,join=‘outer’,join_axes=None,ignore_index=False,keys=None,levels=None, names=None, verify_integrity=False, sort=None, copy=True)
objs 表示需要连接的对象,比如:[df1,df2],需要将合并的数据用综括号包围;
axis=0 表拼接方式是上下堆叠,当axis=1表示左右拼接;
join 参数控制的是外连接还是内连接,join='outer’表示外连接,保留两个表中的所有信息;
join="inner"表示内连接,拼接结果只保留两个表共有的信息;
join_axes参数是在内连接时选择要完整保留哪个表的索引,但是这个参数在官方文档中提醒即将被弃用
2.数据合并pd.merge(left_data,right_data, how = 'inner', on = None, left_on = None, right_on =None,left_index = False, right_index = False, sort = True, suffixes =('_x','_y'),copy = True, indicator = False, validate = None)
left、right:需要连接的两个DataFrame或Series,一左一右
how:两个数据连接方式,默认为inner,可设置inner、outer、left或right
on:连接键的字段,左右数据中都必须存在,否则需要用left_on和right_on来指定
left_on:左表的连接键字段
right_on:右表的连接键字段
left_index:为True时将左表的索引作为连接键,默认为False
right_index:为True时将右表的索引作为连接键,默认为False
suffixes:如果左右数据出现重复列,新数据表头会用此后缀进行区分,默认为_x和_y
区别:
concat只是pandas的方法,而merge既是pandas的方法,又是DataFrame的方法;
concat 可以横向、纵向拼接,又起到关联的作用
merge 只能进行关联,也就是纵向拼接
concat 可以同时处理多个数据框DataFrame,而 merge 只能同时处理 2 个数据框
交叉表:用于计算一列数据对于另一列数据的分组个数统计
pd.crosstab(value1,value2)
透视表:将原有的DataFrame的列分别作为行索引和列索引,然后对指定的列应用聚集函数
data.pivot_table()
DataFrame.pivot_table([],index=[])
注:交叉表出来的数据个数,透视表出来的是百分比
分组聚合:df.grouby(key,as_index=False)
1. FDH5的使用要pip安装包h5py、tables
2.出现URLError关于SSL的证书验证,则取消全局证书验证:
import ssl
ssl._create_default_https_context=ssl._create_unverified_context