Python 在现有数据框中插入新列

Python 在现有数据框中插入新列,python,pandas,Python,Pandas,我正在做一个机器学习作业,在那里我浏览bug数据库,做一个多类分类,然后插入一个新的列,其中包含分类文本。作为调试的一部分,当我再次运行该特定单元格时,它会显示列已经存在。我只是想知道是否有办法克服它(除了通常的异常处理) 我编写的代码如下: trigger_dict = { 'Config-Change':['change','changing','changed'], \ 'Upgrade-Downgrade':['Upgrade','Downgrade','ISSU'],

我正在做一个机器学习作业,在那里我浏览bug数据库,做一个多类分类,然后插入一个新的列,其中包含分类文本。作为调试的一部分,当我再次运行该特定单元格时,它会显示列已经存在。我只是想知道是否有办法克服它(除了通常的异常处理)

我编写的代码如下:

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

具有重复项可能不是一个好的选择。我只是在想,如果我们有类似于过度写作的东西……请看编辑后的答案。