pandas DataFrame.insert() 方法详解:插入指定位置列与处理重复值
本文详解pandas中DataFrame.insert()方法,介绍如何通过loc参数在指定位置插入新列,以及利用allow_duplicates=True处理重复列名的技巧。同时对比insert与drop、pop在列删除与位置调整上的差异,结合代码示例演示整数、Series及数组值的插入操作。
使用insert方法可将指定数据value插入到DataFrame的指定位置loc。若插入的列名column已存在于DataFrame中,默认会抛出ValueError错误;若需允许插入重复列名,需将allow_duplicates参数设置为True。
insert方法详解
DataFrame.insert(loc, column, value, allow_duplicates=False)
参数说明:
若column已包含在DataFrame中,除非将allow_duplicates设置为True,否则将引发ValueError。
Parameters:
loc :指定插入位置的整数loc。若需插入到第一列,则值为0。取值范围为 0 <= loc <= len(columns),其中len(columns)表示DataFrame当前的列数。
column :为新插入数据的列指定名称,该名称可以是数字或字符串。
value :插入的数据内容,可以是整数、Series对象或数组等。
allow_duplicates:布尔值,默认为False。若设为True,则允许插入与现有列名重复的列。
1.创建数据
import pandas as pd
import numpy as np
data = {
'school' : ['北京大学', '清华大学', '山西大学', '山西大学', '武汉大学'],
'name' : ['江路离', '沈希梦', '来使鹭', '陈曦冉', '姜浩然'],
'No.' : [20001943, 300044451, 20190006, 20191234, 1242522]
}
# data = list(data) <-> data = list(data.keys)
# data = list(data.values())
frame = pd.DataFrame(data)
print(frame)
结果:

2.插入数据
frame.insert(0, 'num', np.ones(5))
print(frame)
结果:

frame.insert(len(frame.columns), 'list', [x for x in range(5)])
print(frame)

3.插入已存在数据
结果:

4.把allow_duplicates设置为True,可实现重复值的插入
frame.insert(0, 'num', np.ones(5), allow_duplicates=True)
print(frame)

补充:pandas 中的insert(), pop()在DataFrame的指定位置中插入某一列
在pandas中,del、drop和pop方法均可用于删除数据,而insert用于在指定位置插入数据。
可以看看以下示例。
import pandas as pd
from pandas import DataFrame, Series
data = DataFrame({'name':['yang', 'jian', 'yj'], 'age':[23, 34, 22], 'gender':['male', 'male', 'female']})
#data数据
'''
In[182]: data
Out[182]:
age gender name
0 23 male yang
1 34 male jian
2 22 female yj
'''
#删除gender列,不改变原来的data数据,返回删除后的新表data_2。axis为1表示删除列,0表示删除行。inplace为True表示直接对原表修改。
data_2 = data.drop('gender', axis=1, inplace=False)
'''
In[184]: data_2
Out[184]:
age name
0 23 yang
1 34 jian
2 22 yj
'''
#改变某一列的位置。如:先删除gender列,然后在原表data中第0列插入被删掉的列。
data.insert(0, '性别', data.pop('gender'))#pop返回删除的列,插入到第0列,并取新名为'性别'
'''
In[185]: data
Out[186]:
性别 age name
0 male 23 yang
1 male 34 jian
2 female 22 yj
'''
#直接在原数据上删除列
del data['性别']
'''
In[188]: data
Out[188]:
age name
0 23 yang
1 34 jian
2 22 yj
'''
以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。如有错误或未考虑完全的地方,望不吝赐教。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













