数据分析之Pandas学习笔记(一)(入门)
创建一个简单的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的时候你还是得要搞清楚这些。。。
pandas.DataFrame.from_dict官方文档
data = {
'foo':[1,2,3,4],
'bob':['a','b','c','d']
}
df = pf.DataFrame(data)
传进去的data,和创建Series差不多,
可以是字典
可以是数组
可以是别的DataFrame对象
字典的话,还有个pd.DataFrame.from_dict(data)这样一个方法,
主要是from_dict()方法,里面有一个参数orient='index'
可以把字典中的key变成行索引
列索引命名的话,添加columns=[....]参数即可
数据是否缺失(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对象
,
,
,
下一篇:数据分析之Pandas学习笔记(二)(DataFrame的基本操作)