pandas笔记

pandas三种结构

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

你可能感兴趣的:(数据分析,python,pandas)