数据分析之Pandas学习笔记(一)

天涯浪子 提交于 2019-12-10 01:57:01

创建一个简单的Series对象(一维)

我对Series对象的理解就是一个类似  只有一列数据的Excel表的一维数组

啊哈哈、因为我觉得它和numpy太相似,经常默认把numpy对象和series对象都叫series了
实际运用如果numpy对象也是一维的,也差不多就是这么回事,一个带索引,一个不带索引罢了


硬要计较Series对象和Numpy对象的区别。
我能想到的有以下几点:

1,type类型不同

2,Pandas包内置Numpy包,你在pip下载Pandas包的时候,它自动把Numpy包也给顺带下了

3,Series对象是Pandas包里的对象,它是一个带索引的一维数组对象,
  而ndarray的对象是Numpy包里的对象,它就是一个数组,没有行列索引,可一维也可多维

4,实际中如果ndarray也是一维的,也差不多就是这么回事,一个带索引,一个不带索引罢了

~ ~心里有(B树)就可以了、、

好了,我们心中有B树了以后,接下来开始动手创建吧~

import pandas as pd
import numpy as np
data = np.arange(20,26)
sris = pd.Series(data,index=list('abcdef'))
# 当然你手动一个一个在index列表中敲你要显示的行索引标签也行,比如像下面这样写
# sris = pd.Series(np.arange(20,26),index=['a','b','c','d','e','f'])
print(sris)

创建的时候你传进去的data

可以是一个list,
也可以是一个ndarray对象,
也可以是一个别的Series对象,
也可以是一个字典,

总之是一个序列应该都阔以= =。你自己阔以试试别的序列形式,

我上面介绍的三种都是可行的。

结果如下图所示:

因为你把默认的索引标签[0,1,2,3,4...]改成了['a','b','c',...]
所以当你取值的时候,比如你要取25这个值
那么你可以这样写:
	通过标签索引,获取值 	  -->    sris['f']
	或者通过默认索引,获取值  -->    sris[5]

在这里插入图片描述

创建一个简单的DataFrame对象(二维)

我对DataFrame对象的理解就是一个类似     Excel表的二维数组。

可以有	行列索引标签(label)	index  columns  不设置则默认0,1,2,3...
		
		行列索引名			name
		对表起名字			name
		
		数据透视表			pivot_table()
		Emmm...你能想到Excel表格的所有操作,Pandas应该都能实现。
		
		当然这只是一个简单地 入门 认识和理解。
		
		如果认为Pandas只是一个高级版的 Excel?Power BI?那岂不是很可笑、

简单认识之后、下面我们开始创建吧~

import pandas as pd
import numpy as np

df = pd.DataFrame(np.arange(4 * 4).reshape((4,4)))
print(df)

显示结果如下:
在这里插入图片描述
你感觉这样看都是一串数字太容易混淆了,那么我们设置行列标签作为索引。

df = pd.DataFrame(np.arange(4 * 4).reshape((4,4)),index=list('abcd'),columns=['h1','h2','h3','h4'])

显示结果如下:
在这里插入图片描述
这样看起来还不错~
你要行列索引取值的时候
可以通过默认的数字索引,也可以通过索引标签取你想要的值

下面我们给行列索引起一个名字,给整个‘表’也起一个名字。

import pandas as pd
import numpy as np
#创建一个Index对象,直接将索引和索引名全写进去
#省的后面给索引命名的时候obj.index.name=   obj.columns.name=
index_name = pd.Index(list('abcd'),name ='idx')
columns_name = pd.Index(['h1','h2','h3','h4'],name ='col')

df = pd.DataFrame(np.arange(4 * 4).reshape((4,4)),index=index_name,columns=columns_name)
#没办法,表名在创建DataFrame的时候没有这个参数,只能手动obj.name一下了。
df.name = 'value_table'
print(df)
#因为你在Jypter交互式界面中写df是会显示出这个表名的
#但是在Pycharm中,直接print(df)是看不到表名的
#我这里手动print一下 = =。凑合看看,意思一下。。
print('      df.name       ')

好了,显示结果如下:
在这里插入图片描述
虽然看上去很痛苦难受。。。但是你还是得要适应,习惯这种看法。。。
不然后面接触层次化索引,level的时候你还是得要搞清楚这些。。。

数据是否缺失(NaN)

pd.isnull(obj)  		返回相应的DataFrame或者Series,里面值为bool

pd.notnull(obj)			返回相应的DataFrame或者Series,里面值为bool

obj. head()看前几行(默认选取前5行)

obj.tail()看倒数几行(默认选取倒数5行)

行列选取

选取某一列

df['h1']

在这里插入图片描述

选取某一行

df.loc['d']

df.iloc[3]

两者的区别:
		loc是通过索引标签	   取对应索引的值
		iloc是通过位置(整数)取对应索引的值

在这里插入图片描述

选取多个行或者多个列obj.take( [ int , int ] , axis= )

df.take([0,3],axis=1)

只能通过位置索引(整数),选取 单个单个 的行或者列,不能切片。

axis = 参数为0选取行,参数为1选取列

在这里插入图片描述

索引选取多个列

df[['h1','h3']]

在这里插入图片描述

索引选取多个行

df.loc[['a','c']]
或者df.iloc[[0,2]]

在这里插入图片描述

切片选取多个列

这里划重点了!!!!!!!!!!!!
利用标签的切片和普通的位置切片不同,其末端是包含的。!!!!!!

举例:
利用标签 -----切行

df.loc[['a':'c']]

在这里插入图片描述
可以发现我们切出了3行数据
下面我们利用位置----切行

df.iloc[0:2]

在这里插入图片描述
可以发现,切出了的数据只有2行

所以在切片中,利用标签和位置,进行切片,切出的结果是不一样的!!!

对列进行标签和位置切的效果和上面的也一样。。

其他

obj.values可以将DataFrame对象转成ndarray对象

ndarray对象.tolist()可以转成list格式

del obj[’ '] 只能删除列

索引,Index对象

通过索引返回的列是相应数据的视图

pandas的Index可以包含重复的标签
生成Index对象 --> pd.Index() --> 该对象为不可变类型
			可用append
				difference  	差
				intersection 	交集
				union  			并集
				delete[index]
				drop(value)
				insert
				unique
			来操作Index对象
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!