给DataFrame新增列的话,除了join,merge,concat这些函数之外,还可以通过简单的df['new_column']=values的形式对其新增列,但是在使用这种方式新增列时,需要注意索引问题以及新增多列时该如何操作。

一、索引问题

       这个问题只有在等号右边的对象是Series或者DataFrame时需要注意,因为这时等号右边的对象是有索引的,这样赋值时,要保证新增对象的索引和左边对象的索引一致,不然也只会保存一致的索引对应的值,其他的值为NaN。当然,对于新增一列的情形,可以直接在等号右边以列表或者ndarray等没有索引的可迭代对象赋值,从而避免索引问题。但是对于新增多列的情形,就不能用这种方式避免索引问题的,具体原因如下。

二、新增多列的简单方式

       新增多列时,这里讲的时上述的简单赋值方式,而不是利用join,merge,concat等这些函数去实现。不同于新增一列,新增一列可以直接用df['new_col']=values的方式,新增多列时,需要用df[['col1','col2',...]]=values的方式,里面需要用列表包含多个新增的列名,此外更重要的是,这时的values必须得是DataFrame,往往我们容易想当然的以为这时values也可以是ndarray或者list等对象,但实际则不然,其必须得是DataFrame,所以这时也一定要考虑索引问题;当然,其实完全可以实现和新增一列相同的形式,即values也可以是其他对象,这里之所以这样要求其必须是DataFrame,只是一种规定而已,似乎并没有其他合理的理由。

三、其他需要注意的点以及总结

1、df[['col']]索引得到的对象是一个DataFrame,不再是一个Series,所以要对其新增列,右边的对象也应该是DataFrame;

2、不能用loc或者iloc进行新增列的赋值;

3、所以新增单列,用df['col']=values的方式,values可以为Series,list或ndarray等对象,或者也可以用df[['col']]=values,values必须为DataFrame;新增多列用df[['col1','col2',...]]=values,values必须为DataFrame;当values为Series或者DataFrame时,需要注意索引问题。