数据挖掘02--Pandas

目录

series:

Series属性:

DataFrame:

属性:

修改:   

MultiIndex :

变量列的基本操作:

建立索引:

将索引还原回变量列:

 强行更新索引:

案例排序:

②用变量值排序

按照绝对位置进行筛选

 按照索引值进行筛选

直接进行条件筛选:


 查看当前挂载的数据集目录, 该目录下的变更重启环境后会自动还原:

!ls /home/aistudio/data:

如果需要进行持久化安装, 需要使用持久化路径, 如下方代码示例:

!mkdir /home/aistudio/external-libraries

!pip install beautifulsoup4 -t /home/aistudio/external-libraries

同时添加如下代码, 这样每次环境(kernel)启动的时候只要运行下方代码即可:

import sys

sys.path.append('/home/aistudio/external-libraries')

Numpy已经能够帮助我们处理数据,能够结合matplotlib解决部分数据展示等问题,pandas学习的目的在增强图表可读性

其中Series是一维数据结构,DataFrame是 二维的表格型数据结构,Multilndex是 三维的数据结构。

import pandas as pd

print(pandas.__version__)           #检查版本

conda update pandas             升级版本

series:

s=pd.Series(data,index=index)

data可以是个字典、数组、整数的值 

#通过字典数据创建
color_count=pd.Series({'red':100,'blue':200,'green':500,'yellow':1000})
color_count
>>>
red        100
blue       200
green      500
yellow    1000
dtype: int64


#通过整数创建
a=pd.Series(5,index=list("asdfgh"))
a
>>>
a    5
s    5
d    5
f    5
g    5
h    5
dtype: int64


#通过数组创建
a=[1,2,3,4,5,6]
s=pd.Series(a,index=list("asdfrt"))
s
>>>
a    1
s    2
d    3
f    4
r    5
t    6
dtype: int64

Series属性:

a.index        series的索引

a.values        series的数据

DataFrame:

DataFrame是一个类似于二维数组或表格(如excel)的对象,既有行索引,又有列索引

  • 行索引,表明不同行,横向索引,叫index,0轴,axis=0
  • 列索引,表名不同列,纵向索引,叫columns,1轴,axis=1 
#通过字典创建
a={"name":["xmm","sss","sdf"],"age":[12,13,14]}
pd.DataFrame(data=a,index=list("abc"))
>>>
	name	age
a	xmm	    12
b	sss	    13
c	sdf	    14


#通过列表创建
b=[[1,2,3,4],['a','b','c','d']]
pd.DataFrame(b,columns=list("ABCD"),index=list("ab"))
>>>
	A	B	C	D
a	1	2	3	4
b	a	b	c	d

#通过series创建
a={"name":"xaa","age":44,"sex":"male"}
s=pd.Series(a)
pd.DataFrame(s,columns=["values"])
>>>
	values
name	xaa
age	    44
sex	    male

属性:

data.index         DataFrame的行索引列表

data.columns        DataFrame的列索引列表        

data.values        直接获取其中array的值 

data.T                转置   

修改:   

必须整体全部修改        data.index = stu

注意:以下修改方式是错误的        data.index[3]='学生_3'

data=data.reset_index(drop =True)              重置索引,设置索引为默认索引(0,1,2,3,……)

df=df.set_index('month')                以月份设置新的索引                                                                 

MultiIndex :

df.index.names        index属性,levels的名称

df.index.levels        index属性,每个level的元组值:

变量列的基本操作:

df2.info()         数据框的基本信息

df2.head(10)         浏览前几条记录

df2.tail()         浏览最后几条记录

筛选变量列:

df2.名次|df2[['名次']]        只能筛选单列,结果为Series

df2.名次
>>>
0       1
1       2
2       3
3       4
4       5
     ... 
95     96
96     97
97     98
98     99
99    100
Name: 名次, Length: 100, dtype: int64

df2[['名次']] #如果希望为df数据框,需使用列表形式,不存在也可以使用。此方法有数据框
>>>
	名次
0	1
1	2
2	3
3	4
4	5
...	...
95	96
96	97
97	98
98	99
99	100
100 rows × 1 columns

df.drop( index / columns = 准备删除的行/列标签,多个时用列表形式提供 inplace = False : 是否直接更改原数据框 )        

to_numeric()函数:不能直接操作DataFrame对象

pandas.to_numeric(arg, errors=‘raise’, downcast=None)

上述函数中常用参数表示的含义如下:

arg:表示要转换的数据,可以是list、tuple、Series

errors:错误采用的处理方式可以取值除raise、ignore外,还可以取值coerce,默认为raise。其中raise表示允许引发异常,ignore表示抑制异常。

to_numeric()函数较之astype()方法的优势在于解决了后者的局限性:只要待转换的数据中存在数字以外的字符,在使用后者进行类型转换时就会出现错误,而to_numeric()函数之所以可以解决这个问题,就源于其errors参数可以取值coerce——当出现非数字字符时,会将其替换为缺失值之后进行数据类型转换。

df.select_dtypes()函数:

( include = None : 考虑纳入的变量类型,注意数值类型可能对应了多种关键字 exclude = None : 考虑剔除的变量类型 )                

df2.select_dtypes(include = 'number').head()
df2.select_dtypes(exclude = 'float').head()

建立索引:

一、 新建数据框时建立索引   

df1 = pd.DataFrame({'var1' : 1.0, 'var2' : [1,2,3,4], 'var3' :["test","train","test","train"], 'var4' : 'cons'}, index = [0, 1, 2,5])

import pandas as pd
df1 = pd.DataFrame({'var1' : 1.0, 'var2' : [1,2,3,4], 'var3' :["test","train","test","train"], 'var4' : 'cons'}, index = [0, 1, 2,5])
>>>
0	1.0	1	test	cons
1	1.0	2	train	cons
2	1.0	3	test	cons
5	1.0	4	train	cons

二、读入数据时建立索引

df2 = pd.read_csv("/home/aistudio/data/data154243/高校信息.csv", encoding ="gbk", index_col="学校名称" )

df2 = pd.read_csv("/home/aistudio/data/data154243/高校信息.csv", encoding ="gbk", index_col="学校名称" )
>>>
	名次	总分	类型	所在省份	所在城市	办学方向	主管部门
学校名称							
北京大学	1	100.00	综合	北京	北京市	中国研究型	教育部
清华大学	2	98.50	理工	北京	北京市	中国研究型	教育部
复旦大学	3	82.79	综合	上海	上海市	中国研究型	教育部
武汉大学	4	82.43	综合	湖北	武汉市	中国研究型	教育部
浙江大学	5	82.38	综合	浙江	杭州市	中国研究型	教育部

三、指定某列为索引列

df.set_index(

  • keys : 被指定为索引的列名,复合索引用list格式提供
  • drop = True : 建立索引后是否删除该列
  • append = False : 是否在原索引基础上添加索引,默认是直接替换原索引
  • inplace = False : 是否直接修改原数据框)

df2 = pd.read_csv("/home/aistudio/data/data154243/高校信息.csv", encoding ="gbk" )

df_new=df2.set_index(["名次","学校名称"],drop=False)

df2 = pd.read_csv("/home/aistudio/data/data154243/高校信息.csv", encoding ="gbk" )
df_new=df2.set_index(["名次","学校名称"],drop=False)
>>>
		名次	学校名称	总分	类型	所在省份	所在城市	办学方向	主管部门
名次	学校名称								
1	北京大学	1	北京大学	100.00	综合	北京	北京市	中国研究型	教育部
2	清华大学	2	清华大学	98.50	理工	北京	北京市	中国研究型	教育部
3	复旦大学	3	复旦大学	82.79	综合	上海	上海市	中国研究型	教育部
4	武汉大学	4	武汉大学	82.43	综合	湖北	武汉市	中国研究型	教育部
5	浙江大学	5	浙江大学	82.38	综合	浙江	杭州市	中国研究型	教育部

将索引还原回变量列:

df.reset_index(

  • drop = False : 是否将索引直接删除,而不是还原为变量列
  • inplace = False : 是否直接修改原数据框
  • level = None : 对于多重索引,确定转换哪个级别为变量 )
df_new2.reset_index(inplace = True) 
# 将索引全部还原为变量

df_new2.set_index(['名次','类型','所在省份'], inplace = True)
df_new2
#df_new2.reset_index(level = ['类型']) 
# 筛选其中一个进行还原

df_new2.index.names = [None, None, '省份'] # None代表无名称

 强行更新索引:

reindex则可以使用数据框中不存在的数值建立索引,并据此扩充新索引值对应的索引行/列,同时进行缺失值填充操作

 df.reindex(

* labels : 类数组结构的数值,将按此数值重建索引,非必需

* axis : 针对哪个轴进行重建  ('index', 'columns') or number (0, 1).

* copy = True : 建立新对象而不是直接更改原df/series

* level : 考虑被重建的索引级别

*缺失数据的处理方式 method : 针对已经排序过的索引,确定数据单元格无数据时的填充方法,非必需 * pad / ffill: 用前面的有效数值填充 * backfill / bfill: 用后面的有效数值填充 * nearest: 使用最接近的数值进行填充 * fill_value = np.NaN : 将缺失值用什么数值替代 * limit = None : 向前/向后填充时的最大步长 )

案例排序:

①用索引排序
df.sort_index(

    * axis = 0 : 针对行/列方向排序,{0 or 'index', 1 or 'columns'}
    * level : (多重索引时)指定用于排序的级别顺序号/名称
    * ascending = True : 是否为升序排列,多列时以表形式提供
    * inplace = False 
    * na_position = 'last': 缺失值的排列顺序,first/last
    * ignore_index = False : 如果忽略原有索引,则索引会被重置为0, 1, …, n - 1,1.0.0版新增
    * key = None : 在排序前对索引值应用指定的key函数,1.1.0版新增
)

df2.set_index(['类型','学校名称'], inplace = True)

df2.sort_index(ascending = [True, False]) #复合索引排序

df2.sort_index(level = '学校名称')    #按学校名称排序

df_t=df2.sort_index(level = '学校名称', ignore_index = True)    #按学校名称排序并忽略原索引

df2.sort_index(level = '学校名称', key = lambda x: x.str[:2])    # 只使用学校名称的前两个字排序

②用变量值排序

df.sort_values(

  • by : 指定用于排序的变量名,多列时以列表形式提供
  • axis = 0 : 针对行/列方向排序,{0 or 'index', 1 or 'columns'}
  • ascending = True : 是否为升序排列 选择升序(默认True),或者降序(False)
  • inplace = False :
  • na_position = 'last': 缺失值的排列顺序,first/last
  • ignore_index = False : 如果忽略原有索引,则索引会被重置为0, 1, …, n - 1,1.0.0版新增
  • key = None : 在排序前对索引值应用指定的key函数,1.1.0版新增 

按照绝对位置进行筛选

df.iloc        基于顺序数字(位置)

  • 意为integer-location,即按照行列序号进行检索
  • 可以同时指定行列,指定列时,需要先用","表明为列序号
  • df.iat
  • 本质上和iloc是一回事,可以看作别名                                                                                                       
df2.iloc[0:3] # 不包括右侧界值
>>>
		名次	总分	所在省份	所在城市	办学方向	主管部门
类型	学校名称						
综合	北京大学	1	100.00	北京	北京市	中国研究型	教育部
理工	清华大学	2	98.50	北京	北京市	中国研究型	教育部
综合	复旦大学	3	82.79	上海	上海市	中国研究型	教育部

df2.iloc[[0,3]] 
>>>
		名次	总分	    所在省份	所在城市	办学方向	    主管部门
类型	学校名称						
综合	北京大学	  1	100.00	北京	北京市	中国研究型	教育部
        武汉大学	  4	82.43	湖北	武汉市	中国研究型	教育部

df2.iloc[:,0:3] # 只指定列范围,不包括右侧边界
>>>
		名次	总分	所在省份
类型	学校名称			
综合	北京大学	1	100.00	北京
理工	清华大学	2	98.50	北京
综合	复旦大学	3	82.79	上海
        武汉大学	4	82.43	湖北
        浙江大学	5	82.38	浙江
...	...	...	...	...
师范	浙江师范大学	96	63.37	浙江
综合	安徽大学	97	63.34	安徽
医药	首都医科大学	98	63.32	北京
综合	江南大学	99	63.31	江苏
        山西大学	100	63.29	山西

df2.iloc[1:4,[0,3]] # 同时指定行列范围
>>>
		名次	所在城市
类型	学校名称		
理工	清华大学	2	北京市
综合	复旦大学	3	上海市
        武汉大学	4	武汉市


 按照索引值进行筛选

 df.loc        基于索引名字的值   

按照给出的索引值进行筛选 筛选范围包括上下界值 出现未知索引值时会报错 df.at

本质上和loc是一回事,可以看作别名

df2.loc[2:4] # 切片本身就是一个列表,因此不需要加[]
>>>
    学校名称	总分	类型	所在省份	所在城市	办学方向	主管部门
名次							
2	清华大学	98.50	理工	北京	北京市	中国研究型	教育部
3	复旦大学	82.79	综合	上海	上海市	中国研究型	教育部
4	武汉大学	82.43	综合	湖北	武汉市	中国研究型	教育部

直接进行条件筛选:

按照数据范围进行筛选

df2[df2.名次 > 10]

列表筛选

df.isin(values)

  • 返回结果为相应的位置是否匹配给出的values
  • values为序列:对应每个具体值
  • values为字典:对应各个变量名称
  • values为数据框:同时对应数值和变量名称
df2.名次.isin([1, 3, 5])
>>>
学校名称
北京大学       True
清华大学      False
复旦大学       True
武汉大学      False
浙江大学       True
          ...  
浙江师范大学    False
安徽大学      False
首都医科大学    False
江南大学      False
山西大学      False
Name: 名次, Length: 100, dtype: bool

df2[df2.名次.isin([1, 3, 5])]
>>>
        名次	总分	类型	所在省份	所在城市	办学方向	主管部门
学校名称							
北京大学	1	100.00	综合	北京	北京市	中国研究型	教育部
复旦大学	3	82.79	综合	上海	上海市	中国研究型	教育部
浙江大学	5	82.38	综合	浙江	杭州市	中国研究型	教育部

df2[df2.所在省份.isin(['北京','上海'])]

多重条件的联合筛选:

df2[(df2.名次 > 10) & (df2.名次 < 90)]

# 必须使用(),并且用&连接

用类SQL语句进行筛选:

df.query(

  • expr : 类SQL语句表达式
  • 可以使用前缀'@'引用环境变量
  • 等号为==,而不是=
  • 注意:目前还不支持like语句,可替换df.query('column_name.str.contains("abc")')
  • inplace = False : 是否直接替换原数据框 )

用法举例:

query('(a < b) & (b < c)')

如果索引没有名称,df.query('index < b < c')

可以进行多重索引的指定,如df.query("code=='600801'")

limit = 5
df2.query("名次<=@limit & 类型 == '综合'")
>>>
	    名次  总分	类型	所在省份	所在城市	办学方向	主管部门
学校名称							
北京大学	1	100.00	综合	北京	北京市	中国研究型	教育部
复旦大学	3	82.79	综合	上海	上海市	中国研究型	教育部
武汉大学	4	82.43	综合	湖北	武汉市	中国研究型	教育部
浙江大学	5	82.38	综合	浙江	杭州市	中国研究型	教育部

df2.query('学校名称.str.contains("北京")')
>>>
	    名次	总分	类型	所在省份	所在城市	办学方向	主管部门
学校名称							
北京大学	    1	100.00	综合	北京	北京市	中国研究型	教育部
北京师范大学	15	74.75	师范	北京	北京市	中国研究型	教育部
北京航空航天大学	25	70.58	理工	北京	北京市	中国研究型	工业和信息化部
北京理工大学	30	68.72	理工	北京	北京市	中国研究型	工业和信息化部
北京科技大学	41	66.42	理工	北京	北京市	行业特色研究型	教育部
北京交通大学	42	66.08	理工	北京	北京市	行业特色研究型	教育部
北京协和医学院	45	66.03	医药	北京	北京市	行业特色研究型	国家卫生和计划生育委员会
北京邮电大学	68	64.86	理工	北京	北京市	行业特色研究型	教育部
北京化工大学	78	64.26	理工	北京	北京市	行业特色研究型	教育部
北京工业大学	83	63.89	理工	北京	北京市	区域研究型	北京市
北京林业大学	88	63.79	农林	北京	北京市	行业特色研究型	教育部

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值