pandas将df赋值到另一个df_Pandas之基础操作

本文详细介绍了Pandas库中Series和DataFrame的基本操作,包括Series的定义、索引、命名,DataFrame的创建、数据提取、行列增删改、列顺序更改、索引和列名修改,以及数据类型转换、表合并方法和数据的保存与读取。重点讨论了如何将df赋值到另一个df,以及Pandas中各种操作的灵活性和实用性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Pandas库主要针对Series和DataFrame两种数据结构进行操作,一般与Numpy同时导入:

一、Series

1、Series的定义与使用

Series 是一个带有名称和索引(显性)的一维数组

Series 中包含的数据类型可以是整数、浮点、字符串、列表、元组、ndarray等

创建方式:pd.Series(['data=None', 'index=None', 'dtype=None', 'name=None'],)

从上面显示的dtype可以看出,和ndarray一样,Series中只能保存一种数据类型,如果数据类型不一致的话,也会自动转化为一致,转化的规则和ndarray类似:

注:如果在Pandas对象中dtype被标记为“object”,大概率是字符串,以及非数值型的数据类型

2、Series索引标签及添加

方法一:在创建Series对象的时候添加

定义之后就可以查看Series的索引标签:

方法二:建立好Series之后,用一个新的列表(或者其他有序序列)赋值到该Series的索引对象Index中

3、Series的名字及添加

方法一:在创建Series对象的时候添加

方法二:建立好Series之后,通过改变Series实例属性的方式来添加

4、Series索引名字的添加

通过index.name属性添加

5、Pandas的Index对象

综上所述,一个Series包括了data,index 以及 name,但是按照上面的方法,定义一个完整元素的 Series 的索引,需要先定义索引标签,再定义索引的名字,未免太繁琐。可以通过定义 Index 对象,再将其赋值到Series 中的 index 参数,这样可以一次性定义一个有完整元素的Series索引

6、Series的索引和切片

索引标签的添加并不会删除索引,索引依然可以使用,也可以通过索引标签进行切片:

注意:切片方法有点差异,用索引是不取末端,用索引标签取末端

7、Series的 .get() 方法

Series 和字典非常类似,我们可以将index和其标签看成是key,对应的值看成是value。两个有很多类似的操作,比如Series同样可以使用.get()方法,且如果在Series中无法找到要找的值,可以设定返回默认值:

8、Series掩码提取

Series值筛选与提取的方法和ndarray基本一致

因为Series底层封装的也ndarray数组结构,因此同样支持向量化操作,可以利用 .values 属性获得Series里的ndarry数据:

9、Series运算符和广播方法

Series支持ndarray的运算符和广播方法,包括numpy中的各种运算函数、聚合函数等

二、DataFrame

DataFrame 是一个带有索引的二维数据结构,每列可以有自己的名字,并且可以有不同的数据类型,你可以把它想象成一个 excel 表格或者数据库中的一张表,也可以将它想象成由多个Series拼接成的一个DataFrame,共用一个索引,它是最常用的 Pandas 对象

1、DataFrame的创建

pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

(1)通过二维数组转化过来

(2)通过字典转化

通过字典转化为DataFrame类型时,"键" 会作为列标签,"键"对应的"值" 会作为该列名对应的数据列

(3)通过嵌套列表转化

构建一个嵌套列表,然后再生成一个列标签columns,最后生成一个Index对象,这样,data、colunms、Index 三个对象就构成了DataFrame

同样,DataFrame也可以利用 .values 属性获得ndarry数据

同样Index操作可以作用于行列索引 index 和 columns 上:

2、数据提取

(1)根据列标签名提取

DataFrame中的列标签可以用作取每一列数据:

如果想提取多列,在列表中写多个列标签名即可:

(2)df.loc[ ]

可以用 loc[location] 的方法来进行显示索引

语法:df.loc[索引行, 索引列]

取某一列:

取某几列:

通过索引名取某些行:

通过某列的条件筛选取某些行:

取某些行某些列:

(3)df.iloc[ ]

进行隐式索引,即使用 iloc 也就是 index_loc,这种方式不看你的行列的索引标签是什么,只看数据是处于表中的一个什么位置,依据真正的行列索引值来取

取某行:

取某列:

筛选行列数据:

3、行列增删改

(1)行的增加

(2)行的修改

(3)列的增加与修改

如果该列的所有值都一样,可以通过传入一个标量,Pandas 会自动帮我们广播来填充所有的位置,也可以将一个序列赋值到新的列标签来增加新列;

列值修改也是如此,用一个新的序列数据赋值到对应的列标签中即可;

(4)行列删除

<1> df.drop()

df.drop(['labels=None', 'axis=0', 'index=None', 'columns=None', 'level=None', 'inplace=False'],)

labels:单个标签或类似列表要删除的索引或列标签

axis:{0或'index',1或'columns'},默认为0,决定从索引中删除标签(0或'索引')或列(1或'列')

index,columns:单个标签或类似列表替代指定轴(标签,轴= 1 相当于columns = labels)

level:int或level name,可选。对于MultiIndex,将从中删除标签的级别

inplace:bool,默认为False,如果为True,则执行就地操作并返回None

利用 index 和 columns 参数删除行列:

利用 labels 和 axis 参数删除行列:

注:df.drop()操作并没有删除原表记录,而是返回了一个新的DataFrame对象

删除除了某些行或列以外的数据:

<2> df.pop()

df.pop() 方法只能删除列,且一次只能传入一个列名

注:df.pop()会直接删除原表的列!谨慎操作!

4、列顺序的更改

先用列表定义行的列名顺序,再按照这个新的顺序重新赋值回原 DataFrame,并没有修改原 DataFrame

5、索引和列名的修改

在使用 DataFrame 的过程中,经常会遇到修改列名,修改索引名等情况,使用 rename 轻松可以实现,但是并不会修改原 DataFrame

修改索引名用需要在 df.rename() 中设置 index 参数

修改列名只需要设置 columns 参数

使用 df.rename() 将整个索引标签替换掉,包括行标签index,列标签columns,只需要建立一个映射字典:

该字典的 “键” 对应着 “旧索引”

该字典的 “值” 对应着 “新索引”

同样地,df.rename() 也可以通过字典映射的方法,修改DataFrame的列名:

还可以通过自定义函数转换行列名,函数的参数对应的要修改的 index 或 columns 对象整体:

6、单列数据类型转换

如果想要转换数据类型的话,可以通过 astype 来完成

Series.astype()

pd.to_numeric()

7、表合并方式

(1)pd.concat([df_01, df_02])

用法:np.concatenate([x, y], axis = 0)

(2)df.append(df):只能按axis=0轴合并,相当于按行追加

(3)pd.merge()

用法:pd.merge('left', 'right', how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, suffixes=('_x', '_y'))

how:

left:仅使用左框架中的键,类似于SQL左外连接,保留关键顺序

right:仅使用右框架中的键,类似于SQL右外连接,保留关键顺序

outer:使用来自两个帧的键的并集,类似于SQL full outer 连接,按字典顺序排序键

inner:使用两个帧的交集,类似于SQL内连接,保留左键的顺序

要根据多个列进行合并,传入一个由列名组成的列表即可:

对于重复列名的处理,可以使用 suffixes 选项进行设置:

对于连接键位于索引中,可以使用 left_index = True 或 right_index = True (或者两者都传):

对于层次化索引,需要以列表的形式指明用作合并键的多个列:

两个表均使用索引关联也可以:

8、数据保存与读取

读取数据:pd.read_csv(),pd.read_excel()

绝对路径写法:r"D:\hero_info_o.csv"

除了读取 csv 数据,还可以读取其他带有分隔符的数据,例如 txt 数据:

读取 excel 中不同的 sheet 数据,使用 sheet 参数即可:

以第一行作为索引:传入列名或者 index_col = 0

以其他列作为索引:传入列名

保存数据:df.to_csv(),df.to_excel()

保存到一个 excel 里的多个 sheet:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值