Python 在现有数据框中插入新列
我正在做一个机器学习作业,在那里我浏览bug数据库,做一个多类分类,然后插入一个新的列,其中包含分类文本。作为调试的一部分,当我再次运行该特定单元格时,它会显示列已经存在。我只是想知道是否有办法克服它(除了通常的异常处理) 我编写的代码如下:Python 在现有数据框中插入新列,python,pandas,Python,Pandas,我正在做一个机器学习作业,在那里我浏览bug数据库,做一个多类分类,然后插入一个新的列,其中包含分类文本。作为调试的一部分,当我再次运行该特定单元格时,它会显示列已经存在。我只是想知道是否有办法克服它(除了通常的异常处理) 我编写的代码如下: trigger_dict = { 'Config-Change':['change','changing','changed'], \ 'Upgrade-Downgrade':['Upgrade','Downgrade','ISSU'],
trigger_dict = {
'Config-Change':['change','changing','changed'], \
'Upgrade-Downgrade':['Upgrade','Downgrade','ISSU'], \
'VPC-Related':['MCT','MCEC','VPC'], \
'CLI-Related':['CC','Consistency','Checker','Show','Debug','Clear'], \
'Interface-Flap': ['Flap','Shut'] ,\
'Reload-Related': ['reload','reboot','ASCII','Replay'],\
'Process-Related': ['Restart','Kill','Process'],\
'ACL-Related': ['RACL','PACL','IFACL'],\
'Config-Unconfig': ['config','remove','removal','Unconfig','reconfig'],\
'HA-Related': ['SSO','LC','Switchover'],\
}
cat_1 = pd.Series([])
flag = 0
for index in range(df['Headline'].shape[0]):
text = df['Headline'][index]
for key, value in trigger_dict.items():
for val in value:
if re.search(val, text, re.I):
if not flag:
cat_1[index] = key
flag = 1
flag = 0
df.insert(len(df.columns),"Trigger_Type", cat_1)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-45-d23348f7bbac> in <module>
12 flag = 0
13
---> 14 df.insert(len(df.columns),"Trigger_Type", cat_1)
~/Desktop/Anaconda/anaconda3/envs/nlp_course/lib/python3.7/site-packages/pandas/core/frame.py in insert(self, loc, column, value, allow_duplicates)
3220 value = self._sanitize_column(column, value, broadcast=False)
3221 self._data.insert(loc, column, value,
-> 3222 allow_duplicates=allow_duplicates)
3223
3224 def assign(self, **kwargs):
~/Desktop/Anaconda/anaconda3/envs/nlp_course/lib/python3.7/site-packages/pandas/core/internals.py in insert(self, loc, item, value, allow_duplicates)
4336 if not allow_duplicates and item in self.items:
4337 # Should this be a different kind of error??
-> 4338 raise ValueError('cannot insert {}, already exists'.format(item))
4339
4340 if not isinstance(loc, int):
ValueError: cannot insert Trigger_Type, already exists
trigger\u dict={
“配置更改”:[“更改”、“更改”、“更改”]\
“升级降级”:[“升级”、“降级”、“发行”]\
“专有网络相关”:[“MCT”、“MCEC”、“专有网络]\
与CLI相关的“:['CC'、'Consistency'、'Checker'、'Show'、'Debug'、'Clear']\
“接口活门”:[“活门”,“关闭”]\
“重新加载相关”:[“重新加载”、“重新启动”、“ASCII”、“重播”]\
“与流程相关”:[“重新启动”、“终止”、“流程”]\
“ACL相关”:[“RACL”、“PACL”、“IFACL”]\
“配置未配置”:[“配置”、“删除”、“删除”、“未配置”、“重新配置”]\
‘HA相关’:[‘SSO’、‘LC’、‘切换’]\
}
cat_1=pd.系列([])
标志=0
对于范围内的索引(df['Headline'].shape[0]):
text=df['Headline'][索引]
对于键,触发器目录项()中的值:
对于val值:
如果重新搜索(val、text、re.I):
如果没有标记:
cat_1[索引]=键
标志=1
标志=0
测向插入(长度(测向列),“触发器类型”,类别1)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
12标志=0
13
--->14测向插入(长度(测向列),“触发器类型”,类别1)
插入中的~/Desktop/Anaconda/anaconda3/envs/nlp\u课程/lib/python3.7/site-packages/pandas/core/frame.py(self、loc、column、value,允许重复)
3220值=self.\u sanitize\u列(列、值、广播=False)
3221自身数据插入(位置、列、值、,
->3222允许重复项=允许重复项)
3223
3224 def分配(自身,**kwargs):
插入中的~/Desktop/Anaconda/anaconda3/envs/nlp\u课程/lib/python3.7/site-packages/pandas/core/internals.py(self、loc、item、value、允许重复)
4336如果不允许重复项和self.items中的项目:
4337#这应该是另一种错误吗??
->4338 raise VALUERROR('无法插入{},已存在'。格式(项))
4339
4340如果不存在(loc,int):
ValueError:无法插入触发器类型,已存在
它不起作用,因为您已经有一个同名的列。如果您同意使用重复列,那么可以传递allow_duplicates=True
df.insert(len(df.columns),“触发器类型”,类别1,允许重复=True)
否则,您将不得不将该列重命名为其他内容
如果要完全替换该列,还可以使用:
df['Trigger_Type']=cat1
具有重复项可能不是一个好的选择。我只是在想,如果我们有类似于过度写作的东西……请看编辑后的答案。