0
点赞
收藏
分享

微信扫一扫

Pandas库基础知识

你的益达233 2022-04-05 阅读 45
python

文章目录

pandas包依赖于 NumPy 包

1 数据结构

1、 Series 数据结构

Series 是一种类似于一维数组的对象,由一组数据和一组数据标签(索引值)组成。
在这里插入图片描述

(1) Series对象的创建

通过Series()方法创建对象,也可以直接将列表、字典等序列类型转换成Series数据。
当参数为列表时列表元素作为series的值;当参数为字典时key作为series的索。

s=pd.Series(range(6),index=['a','b','c','d','e','f'],name='333333')
s1=pd.Series([1,2,3,5])  #当没有显示指定索引的时候,Series 自动以 0 开始,步长为 1 为数据创建索引
s2=pd.Series({'a':[1,2,3,4],'b':[9,8,7,6]})  # 
s3=pd.Series({'a':1,'b':2,'c':3}) # 

在这里插入图片描述

(2) Series对象的属性

获取数据:Series.values
获取名称:Series.name
获取index:Series.index
获取index的名称:Series.index.name

2、 DataFrame 数据结构

DataFrame是由一组数据和一对索引(行索引和列索引)组成的表格型数据结构。
在这里插入图片描述
当你将列表或数组赋值给一个列时,值的长度必须和DataFrame的长度相匹配。如果你将Series赋值给一列时,Series的索引将会按照DataFrame的索引重新排列,并在空缺的地方填充缺失值

(1) DataFrame对象的创建

df=pd.DataFrame(list/dict)

(2) DataFrame对象的属性

获得index:dataframe.index
获得columns:dataframe.columns
获取数据:dataframe.values
获取类型:dataframe.dtype
获得维度信息:dataframe.ndim
获取shape信息:dataframe.shape
获取行及列索引:dataframe.axes
转置列表:dataframe.T

3、Series和 DataFrame的互相转换

Series------》DataFrame:

Series.to_frame(['column_name']) # column_name选填参

DataFrame------》Series:

DataFrame[column_name]

2 导入与导出数据

一般导入数据会使用到pandas库中的read_x()方法,其中x代表数据文件的类型,例如:read_excel()、read_csv()、read_table()

1、excel文件

(1)导入数据
语法:padans.read_excel("文件路径"[,sheet_name=name / index,index_col=index ,header=index ,usecols=index/序列 , usecols=index / index_seq ])
参数说明:
sheet_name: 指定工作表名称,默认第一个工作表
index_col: 指定行索引,默认从excel数据中的第0列开始
header: 指定列索引,默认从excel数据中的第0行开始
usecols: 指定数据导入时的列

(2)导出数据

语法:DataFrame.to_excel( path, sheet_name='Sheet1', na_rep='', columns=None, header=True, index=True,encoding=None)
参数说明:
path: 文件路径,文件后缀最好是xlsx格式
sheet_name: 要写入工作表的表名
na_rep: 表示缺失数据,不写默认为空
columns: 要写入的列
header: 数据的表头
index: 是否写入行索引
encoding: 编码方式

还有一种方法是采用ExcelWriter方法

with pd.ExcelWriter('output.xlsx') as writer:
	df1.to_excel(writer, sheet_name='Sheet_name_1')

2、 csv文件

(1)导入数据

df=padans.read_csv("文件路径"[,sep= ,nrows= , encoding=utf8/gbk  , engine=None])
# sep  定义分隔符,根据分隔符分隔csv中的数据返回结果给df,默认逗号分割(如csv数据不是用逗号分隔时会整行返回)
# nrows 指定返回csv数据中的行数
# encoding 指定编码方式
# engine  设置解析语言,参数值有python和c,所以路径中存在中文时会抛出OSError异常

当数据量很大时,可以修改engine参数,修改为pyarrow(仅限pandas1.4版本之后),也可以使用Parquet 数据格式

import pandas as pd
df = pd.read_csv("001.csv")
df.to_parquet("001.parquet", compression=None)
df = pd.read_parquet("001.parquet", engine="fastparquet")

(2)导出数据

df.to_csv(path,sep=',',na_rep='',columns=None,header=True,index=True,mode='w',encoding=None)
# mode:模式,'w'写入模式,'a'追加写入模式 

3、 txt文件

(1)导入数据
语法:padans.read_table(path,sep='\\t',delimiter='None',header='infer',na_filter=True)
参数说明:
sep: 定义分隔符,根据分隔符分隔文件中的数据返回结果给df
delimiter: 分隔符别名
header: 标题行,默认infer(自动推导)
usecols: 需要导入的列
nrows: 需要导入的行数
na_filter: 是否检查缺失值

read_table()方法是利用分隔符来分开文件并将分隔后的文件导入,它不仅可以导入.txt文件,还可以导入.csv文件。

4、 导入sql文件

(1)python与数据库连接

语法:pymysql.connect(host='',user='',password='',db='',charset='')
参数说明:
host: 用户名
user: 密码
password: 数据库地址/本机使用localhost
db: 数据库名

(2)导入sql文件

语法:padas.read_aql(sql,con [, index_col])
参数说明:
sql: 是需要执行的sql语句
con: 第一步链接数据库的实例对象
index_col: 设置行索引

5、总结

数据格式读取函数写入函数
excelread_excelto_excel
csvread_csv / read_tableto_csv
txtraad_tableto_table
jsonread_jsonto_json
sqlread_sqlto_sql
htmlread_htmlto_html
剪贴板read_clipboardto_clipboard

3 数据预览

1、 控制显示行数

s[5] 切片的形式显示指定行数据
df.head( [ size ] ) 显示前N行,默认前5行
df.tail( [ size ] ) 显示后N行,默认后5行
df.sample( [ size ] ) 随机显示N行,默认1行

2、 获取数据表的大小

len(s) 获取多少个数据
df.shape 以元组形式返回数据表的总行数和列数
df.count() 获取每列的有效个数,不包含无效值(Nan)

3、 获取数据类型

第一种方法:df.info() 返回整个数据表中所有列的数据类型,返回的结果包含行索引和列数
第二种方法:df [ 列名 ].dtype 返回指定列的数据类型
第三种方法:df.dtypes 返回每一列的数据类型

4、 获取数值分布情况

df.describe() 将数据表中数值类型中数据的均值、最值、方差和分位数返回

4 索引操作

1、修改columns

第一种方法:
语法:data.columns=list
功能描述:重新赋值列索引名
返回情况:无返回,直接修改原值
注意: 此方法会直接全部列名都被修改

第二种方法:
语法:data.rename(columns={"columns_name":'new_columns_name'},inplace=True)
功能描述:根据传入的参数,直接修改列索引名
返回情况:根据inplace的参数值判断返回情况

2、修改index

第一种方法:
语法:df.set_index('columns_name'[,append=False,drop=True,inplace=False,verify_integrity=False])
功能描述: 将传入的列名设置为行索引
返回情况: 返回一个设置索引后的DataFrame
参数说明:
append: 是否保留原索引
drop: 该列被指定为索引后,是否删除该列
verify_integrity: 检查新索引是否存在重复项

第二种方法:
语法:df.reset_index((level=None,name=None,inplace=False,drop=True)
功能描述: 重置索引,重置的索引值为默认索引range(0,end)
返回情况: 根据inplace的参数值判断返回情况
注意:
1、当drop=True时,直接丢弃原来的索引;若为Fales时,原索引被并入新的一列。
2、当Series转换成DataFrame时,但inplace的参数值必须是False,否则抛出TypeError异常

第三种方法:
语法:df.rename({’index_name‘:'new_index_name'},inplace=True) 没有指明columns时会直接默认为index
功能描述: 根据传入的参数,直接修改索引名
返回情况: 根据inplace的参数值判断返回情况

3、添加columns

第一种方法: 直接赋值添加

第二种方法: 通过ass

第三种方法: 通过insert函数

4、多重索引

(1)多重索引的建立
使用set_index方法:df.set_index(['index_name1','index_name2'])

(2)获取多重索引值

获取所有索引:df.index/columns.levels
获取指定层级的索引:df.index/columns.get_level_values(N) N一般为层级数
获取指定层级的索引值:df.index/columns.get_level_values(N).values N一般为层级数

5 数据增删改查

1、直接访问

(1)通过列索引名访问:df[ column_name]

(2)通过切片访问 :df[ start_index : end_index ]

(3)调用values属性:df.values (以ndarray的类型返回数据)

2、loc方法 (通过行列索引名称或切片来取数据)

在这里插入图片描述

3、iloc方法(通过行列下标来取数据)

在这里插入图片描述

4、条件筛选

(1)筛选条件

语法: df[df[条件]]
功能描述: 筛选出符合条件的并返回符合条件的数据
注意:
多个条件筛选时:df[(df[条件])|(df[条件])] / df[(df[条件])&(df[条件])]

(2)where()方法

语法:DataFrame.where(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=<no_default>)
功能描述: 返回整个数据,但不符合条件的值为nan
参数说明: cond代表条件;other代表填充的数据

(3)mask()方法

语法:DataFrame.mask(cond, other=nan, inplace=False, axis=None, level=None, errors='raise', try_cast=<no_default>)
功能描述: 返回整个数据,但符合条件的值为nan
参数说明: cond代表条件;other代表填充的数据

在这里插入图片描述

4、 数据修改与添加

针对数据的修改直接定位出位置再赋新的值即可修改数据,若定位的index不在原数据会创建新的index再赋值。

1、数据赋值修改

df['columns_name']=value
data1.loc['index_name','columns_name']=value
data1.iloc[index,columns]=value

2、数据替换

df.replace(to_replace='查找的字符', value='替换后的字符', regex=False, inplace = False,limit=None,method='pad')
# 查找的字符:当使用正则时,要求查找的字符是字符串类型  
# method : 填充方式,pad,ffill,bfill分别是向前、向前、向后填充

注意一般将数据类型变成字符串类型采用apply方法: df['column_name'].apply(int) df.astype('int')

df.replace(['abc', '-'], ['aa', np.nan]) #将字符abc替换成aa,’-‘替换成NAN
df.replace({'aa': r'^C.$','bb':r'(a)'}, {'aa': 'unkonwn','bb':'CCC'}, regex=True) #将aa列长度为2以C开头非换行符结尾的字符都替换为‘unkonwn’,将bb列含有字母a的字符串中‘a’替换成‘CCC’

3、append()方法

语法: df.append(other, ignore_index= False, verify_integrity= False, sort= False)
功能描述: 将一个或多个DataFrame或Series添加到DataFrame中
参数说明:
other: 追加的数据
ignore_index : 是否忽略原索引,为 True 则重新进行自然索引
verify_integrity: 检查新索引是否存在重复项
sort: 是否排序

4、concat()方法

语法: pd.concat(objs, axis=0, join='outer', ignore_index= False, keys=None, levels=None, names=None, verify_integrity= False, sort= False, copy= True)
功能描述: 数据合并
参数说明:
axis: 连接轴方向(1–水平,0–垂直)
join: 连接方式(‘inner’内连接交集,‘outer’外连接并集)
ignore_index: 是否省略原索引重新分配索引
keys: 连接的键
levels: 索引级别
verify_integrity: 是否允许列名重复
sort: 是否排序

5、insert()方法

语法: df.insert(loc, column, value, allow_duplicates= False)
功能描述: 向指定的列插入数据
参数说明:
loc: 索引位置
column: 新列的列名
value: 新列的值
allow_duplicates: 是否允许列名重复

6、assign()方法

语法:df.assign(**kwargs)
功能描述: 添加列并返回修改后的数据

df=pd.DataFrame([1,2,3,4])
df=df.assign(number1=[x for x in range(4)],s=[55,44,33,22])
print(df)
举报

相关推荐

0 条评论