如何将一个空列添加到数据框?
向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'])