先生成测试数据,存放学生的成绩信息:
import copy
import pandas as pd
data = pd.DataFrame({'name':['Lindsay','Chris','Ambe','Delia','Ula'],
'score':['55分','66分','77分','88分','99分'],
'course_id':[1,1,1,1,1]})
data
namescorecourse_id0Lindsay55分11Chris66分12Ambe77分13Delia88分14Ula99分1
1.修改列名
直接暴力修改,就是直接 把所有列名进行重置,赋予新的列名。
这种方式必须 把所有的列名都写上(不修改名称的也要写),而且顺序和数量都必须和原来的数据表保持一致。
如:把 ‘course_id’ 改为 ‘课程id’。
data_1 = copy.deepcopy(data)
data_1.columns = ['name', 'score', '课程id']
data_1
namescore课程id0Lindsay55分11Chris66分12Ambe77分13Delia88分14Ula99分1
显然,当数据表中有很多列时,这种方式并不是明智之举。
rename()函数可以 直接指定需要更改的原列名和新列名,当有多列需要更改时,用字典的方式提供列名更改信息。
参数格式:
DataFrame.rename( columns = { ‘原列名1′:’新列名1’,…, ‘原列名n’:’新列名n’ }, inplace = False )
inplace=False:表示不直接在原始数据上修改列的名称,而是生成一个副本,可以赋值给新的对象,inplace默认为False。
inplace=True:直接在原始数据上修改列的名称。
data_2=data.rename(columns={'name':'姓名', 'score':'成绩'})
data_2
姓名成绩course_id0Lindsay55分11Chris66分12Ambe77分13Delia88分14Ula99分1
2.修改列的顺序
在工作中,我们有时候需要对数据表的列进行重排序。
我们可以根据我们的需要, 按照指定的顺序读取列,然后赋值给新的变量。
如:将 ‘course_id’ 列显示到最前面。
data_3 = data[['course_id','name','score']]
data_3
course_idnamescore01Lindsay55分11Chris66分21Ambe77分31Delia88分41Ula99分
3.删除列
当我们读取到的原始数据中,有些列是我们不需要的时。
我们可以从以下两个方面来处理。
- 1.读取数据的时候 只读取需要的列,不需要的列就不读取,然后赋值给新的变量;
- 2.使用 del 方法删除列(只能删除单列);
- 3.使用 drop() 函数删除列(可以删除多列)。
如:删除 ‘course_id’ 列。
data_4 = data[['name','score']]
data_4
namescore0Lindsay55分1Chris66分2Ambe77分3Delia88分4Ula99分
备注:这种方式 看上去
是删除了 ‘course_id’ 列,其实只是让新的变量中不存放’course_id’ 列的值,原始数据并没有发生改变。
data_5 = copy.deepcopy(data)
del data_5['course_id']
data_5
namescore0Lindsay55分1Chris66分2Ambe77分3Delia88分4Ula99分
备注:del 方法 一次只能删除一列,不能删除多列,而且是 直接对原始数据进行删除。
drop()方法可以通过直接 指定索引或列名,删除行或列。
参数格式:
DataFrame.drop(labels=None,axis=0,index=None,columns=None,inplace=False)
- labels:接收字符串或列表。代表删除的行或列的标签,无默认值。
- axis:接收0或1。代表操作的轴向,0代表删除行,1代表删除列,默认为0。
- index:接收字符串或列表。代表删除的行的索引index,无默认值。
- columns:接收字符串或列表。代表删除的列的名称,无默认值。
- inplace:接收boolean。代表操作是否对原始数据生效,默认为False。
data.drop(columns='course_id', axis=1, inplace=True)
data
namescore0Lindsay55分1Chris66分2Ambe77分3Delia88分4Ula99分
备注:指定删除的列名为 ‘course_id’,axis=1代表删除列, inplace=True 代表直接在原始数据上进行删除。
drop() 函数可以同时删除多列。
如:同时删除 ‘name’ 和 ‘score’ 列的写法:
data.drop(columns=['name','score'], axis=1)
01234
3.新建列
在 DateFrame 类型的数据后面, 直接跟上新的列名,然后赋值。
这种方式 会直接修改 DateFrame 的值,在该 DateFrame 类型的数据后面,新增一列。
格式为:
DateFrame[‘新列名’] = ‘新列值’
如:现在学生的成绩是 ” str ” 类型,而且带有汉字”分”,不方便计算。
我们需要新建一列,提取出成绩中的数值部分。
data['score1'] = data['score'].str.replace('分','').astype('int32')
data
namescorescore10Lindsay55分551Chris66分662Ambe77分773Delia88分884Ula99分99
注:该方法 不可以选择插入新列的位置,默认为最后一列。
如果新增的一列值相同,直接为其赋值一个常量即可;
如果插入值不同,为列表格式, 需与已有列的行数长度一致,如上面例子中原来列为5行,新增列也必须有5个值。
前面直接赋值的方法只能在原始数据的 最后位置插入一列数据。
如果想要 在任意位置插入一列,就需要用到insert()函数。
语法格式如下:
DataFrame.insert(loc, column, value,allow_duplicates = False)
参数:
- loc:必要字段,int类型数据,表示插入新列的列位置,原来在该位置的列将向右移。
- column:必要字段,插入新列的列名。
- value:必要字段,新列插入的值。如果仅提供一个值,将为所有行设置相同的值。可以是int,string,float等,甚至可以是series /值列表。
- allow_duplicates:可选字段。布尔值,用于检查是否存在具有相同名称的列。默认为False,不允许与已有的列名重复。
如:我们在第 0 列的位置插入新的一列,列名为 test,值为3。
data.insert(loc=0, column='test', value=3)
data
testnamescorescore103Lindsay55分5513Chris66分6623Ambe77分7733Delia88分8843Ula99分99
为了不影响后面的使用,我们把 ‘test’ 列删除。
data.drop('test',axis=1,inplace=True)
data
namescorescore10Lindsay55分551Chris66分662Ambe77分773Delia88分884Ula99分99
df.apply()方法可以 为我们添加条件列提供支持。
apply()函数主要用于对 DataFrame 中的 某一行或列 中的元素执行 相同的函数操作 。
参数格式:
DataFrame.apply(函数名, axis=0/1)
axis=0:将函数操作应用到行上; axis=1:将函数操作应用到列上。
如:我们定义一个函数,来对成绩进行分级。
score
Original: https://blog.csdn.net/lengxuan001/article/details/126380155
Author: 冷漩
Title: pandas 对列的相关操作
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/693397/
转载文章受原作者版权保护。转载请注明原作者出处!