pandas库简单用法总结

发布时间 2023-04-14 23:13:23作者: haruyuki

简介

pandas 是基于NumPy 的一种工具,主要用途是做数据分析,对于初学者,比较常用的就是处理csv或者excel文件

DataFrame数据结构

DataFrame组成

DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一。DataFrame 一个表格型的数据结构,既有行标签(index),又有列标签(columns),它也被称异构数据表,所谓异构,指的是表格中每列的数据类型可以不同,比如可以是字符串、整型或者浮点型等。其结构如下所示:

index 所属 属性
0 刻晴 璃月
1 妮露 须弥
2 纳西妲 须弥

最左一列的index是DataFrame的行索引,DataFrame 会自带行标签索引,默认为“隐式索引”即从 0 开始依次递增,行标签与 DataFrame 中的数据项一一对应。数据以行和列形式来表示,其中每一列表示一个属性,而每一行表示一个条目的信息。

常用DataFrame创建方式

目标数据结构:

     名  所属 属性
0   刻晴  璃月  雷
1   妮露  须弥  水
2  纳西妲  须弥  草

1. 使用二维列表创建

import pandas as pd

datas = [['刻晴','璃月',''],
         ['妮露','须弥',''],
         ['纳西妲','须弥','']]
df = pd.DataFrame(datas,columns=['','所属','属性'])
print(df)

(1)二维列表中的每个子列表即为每行的条目数据,columns参数为列标签

(2)列标签与条目数据按位置对应,需要注意的是条目数据(子列表)长度不能超过列标签数量

(3)行标签index无需设置,默认为np.arange(n),n为二维列表的长度

2. 使用字典嵌套列表创建

import pandas as pd

datas = {'':['刻晴','妮露','纳西妲'],'所属':['璃月','须弥','须弥'],'属性':['','','']}
df = pd.DataFrame(datas)
print(df)

(1)字典的键为列标签,也就是列名

(2)值为该列对应的数据,以列表形式传入,列表的元素索引与行标签index对应

(3)行标签index无需设置,默认为np.arange(n),n为字典的值中最长列表的长度。也可设置自定义行标签,如下:

import pandas as pd

datas = {'':['刻晴','妮露','纳西妲'],'所属':['璃月','须弥','须弥'],'属性':['','','']}
df = pd.DataFrame(datas,index=['大保底1','大保底2','大保底3'])
print(df)

结果为

        名  所属 属性
大保底1   刻晴  璃月  雷
大保底2   妮露  须弥  水
大保底3  纳西妲  须弥  草

3.使用列表嵌套字典创建

import pandas as pd

datas = [{'':'刻晴','所属':'璃月','属性':''},
         {'':'妮露','所属':'须弥','属性':''},
         {'':'纳西妲','所属':'须弥','属性':''}]
df = pd.DataFrame(datas)
print(df)

(1)列表中的每个子字典为每行的条目数据

(2)子字典中的键为列标签,值为该列所对应的数据

(3)列表中字子字典的索引与行标签index对应

(4)行标签index无需设置,默认为np.arange(n),n为列表的长度(子字典的数量)。也可设置自定义行标签,方式与第二种方法一致

DataFrame数据访问

 1.按列标签获取

df的结构如下所示

datas = [['刻晴','璃月',''],
         ['妮露','须弥',''],
         ['纳西妲','须弥','']]
df = pd.DataFrame(datas,columns=['','所属','属性'])
     名  所属 属性
0   刻晴  璃月  雷
1   妮露  须弥  水
2  纳西妲  须弥  草

使用df[列标签],即可获取某一列的值,例如

print(df['名'])

结果为:

1     刻晴
3     妮露
5    纳西妲
Name: 名, dtype: object

按列标签获取,获取'名'这一列的数据

2. 按行号切片获取

print(df[0:2])

结果为:

    名  所属 属性
1  刻晴  璃月  雷
3  妮露  须弥  水

df的结构同上,此语法可以获取第0行到第2行的数据。注意:

(1)此时必须写行号的切片,若只写一个数字,会被解释为第1中情况的列标签

(2)此切片遵循左闭右开区间规则

3. loc方法

df的结构如下所示

import pandas as pd
datas = [['刻晴','璃月',''],
         ['妮露','须弥',''],
         ['纳西妲','须弥','']]
df = pd.DataFrame(datas,columns=['','所属','属性'],index=['1','3','5'])
     名  所属 属性
1   刻晴  璃月  雷
3   妮露  须弥  水
5  纳西妲  须弥  草

loc方法的基本语法为:

DateFrame.loc[行标签:列标签]

(1)对于单一行,或者单一列,可以直接传入对应的行标签和列标签,例如:

print(df.loc['1',''])

结果为:刻晴

 注意此时的行标签为自定义的字符串'1','3','5',而非默认的0,1,2

(2)对于连续的多行,或者连续的多列,可以使用类似于切片的语法:[起点标签:终点标签]此时为左闭右闭区间,例如:

print(df.loc['1':'5','':'属性'])

结果为:

     名  所属 属性
1   刻晴  璃月  雷
3   妮露  须弥  水
5  纳西妲  须弥  草

从行标签为'1'的行,到行标签为'5'的行,从列标签为'名'的列到列标签为'属性'的列,按顺序连续取,并且遵循左闭右闭的规则

(3)对于特定的某些行,或者特定的某些列,可以以行标签列表或列标签列表的形式传入,例如:

print(df.loc[['1','5'],['','属性']])

结果为:

     名 属性
1   刻晴  雷
5  纳西妲  草

筛选出行标签为'1'、'5'的行,以及列标签为'名','属性'的列

(4)loc方法中的列标签可以省略,默认取对应行的所有列,例如:

print(df.loc[['1','5']])

结果为:

     名  所属 属性
1   刻晴  璃月  雷
5  纳西妲  须弥  草

4. iloc方法

iloc的基本语法为:

DateFrame.iloc[行号:列号]

iloc使用方法和loc基本一致,都可以用直接传入、切片、列表等方式

但iloc和loc的区别在于:

(1)loc中的行和列是标签,而iloc中的行和列是序号,序号从0开始,例如:

     名  所属 属性
1   刻晴  璃月  雷
3   妮露  须弥  水
5  纳西妲  须弥  草

行标签是'1'、'3'、'5',列标签是'名'、'所属'、'属性',而行号是0、1、2,列号也是0、1、2

(2)loc切片是左闭右闭区间,而iloc是左闭右开区间

例如想从

     名  所属 属性
1   刻晴  璃月  雷
3   妮露  须弥  水
5  纳西妲  须弥  草

得到:

     名  所属 
1   刻晴  璃月 
3   妮露  须弥  

两种函数的写法分别为:

loc:

print(df.loc['1':'3','':'所属'])

iloc:

print(df.iloc[0:2,0:2])