如何将一个空列添加到数据框?

向pandas DataFrame对象添加空列的最简单方法是什么? 我偶然发现的最好的东西就是这样的

 df['foo'] = df.apply(lambda _: '', axis=1) 

有没有一个不好的方法?

IIUC,任务应填写:

 >>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]}) >>> df AB 0 1 2 1 2 3 2 3 4 >>> df["C"] = "" >>> df["D"] = np.nan >>> df ABCD 0 1 2 NaN 1 2 3 NaN 2 3 4 NaN 

为了添加到DSM的答案和build立在这个相关的问题上 ,我将这种方法分为两种情况:

  • 添加单个列:只需将空值分配给新列,例如df['C'] = np.nan

  • 添加多列:我build议使用.reindex(columns=[...]) 方法将新列添加到数据框的列索引。 这也适用于添加多个新行。

以下是添加多列的示例:

 mydf = mydf.reindex( mydf.columns.tolist() + ['newcol1','newcol2']) # version >= 0.20.0 

要么

 mydf = mydf.reindex( columns = mydf.columns.tolist() + ['newcol1','newcol2']) # version < 0.20.0 

你也可以总是连接一个新的(空的)数据框到现有的数据框,但是这对我来说并不是pythonic 🙂

v0.16.0开始,可以使用DF.assign()将新的列( 单个/多个 )分配给DF 。 这些列按字母顺序插入到DF的末尾。

与简单赋值相比,在要直接在返回的dataframe上执行一系列链接操作的情况下,这将变得有利。

考虑@DSM展示的相同DF样本:

 df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]}) df Out[18]: AB 0 1 2 1 2 3 2 3 4 df.assign(C="",D=np.nan) Out[21]: ABCD 0 1 2 NaN 1 2 3 NaN 2 3 4 NaN 

请注意,这将返回所有以前的列以及新创build的副本。 为了使原始DF地被修改,使用它: df = df.assign(...)因为它当前不支持inplace操作。

更简单的解决scheme是:

 df = df.reindex(columns = header_list) 

其中“header_list”是要显示的标题列表。

列表中包含的任何未在数据框中find的标题将在下面添加空白单元格。

因此,如果

 header_list = ['a','b','c', 'd'] 

那么c和d将被添加为空白单元格的列

@ emunsing的答案对于添加多列是非常酷的,但是我不能在Python 2.7中为它工作。 相反,我发现这个作品:

 mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])