将空列添加到pandas DataFrame 对象的最简单方法是什么?我偶然发现的最好的就像是
DataFrame
df['foo'] = df.apply(lambda _: '', axis=1)
是否有一种不那么不正常的方法?
如果我理解正确,任务应该填写:
>>> df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]}) >>> df A B 0 1 2 1 2 3 2 3 4 >>> df["C"] = "" >>> df["D"] = np.nan >>> df A B C D 0 1 2 NaN 1 2 3 NaN 2 3 4 NaN
要添加到DSM的答案并在this associated question上构建,我将该方法分为两种情况:
添加单个列:只需为新列指定空值,例如 df['C'] = np.nan
df['C'] = np.nan
添加多列:我建议使用 .reindex(columns=[...]) method of pandas将新列添加到数据框的列索引中 . 这也适用于添加多个新行 .
.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 :)
一个更简单的解决方案是:
df = df.reindex(columns = header_list)
其中“header_list”是您要显示的 Headers 列表 .
列表中包含的任何未在数据框中找到的 Headers 将添加下面的空白单元格 .
因此,如果
header_list = ['a','b','c', 'd']
然后将c和d添加为具有空白单元格的列
从 v0.16.0 开始,DF.assign()可用于将新列(单个/多个)分配给 DF . 这些列按字母顺序插入 DF 的末尾 .
v0.16.0
DF
与在直接对返回的数据帧执行一系列链接操作的情况下的简单赋值相比,这变得有利 .
考虑@DSM演示的相同 DF 示例:
df = pd.DataFrame({"A": [1,2,3], "B": [2,3,4]}) df Out[18]: A B 0 1 2 1 2 3 2 3 4 df.assign(C="",D=np.nan) Out[21]: A B C D 0 1 2 NaN 1 2 3 NaN 2 3 4 NaN
请注意,这将返回包含所有先前列以及新创建的列的副本 . 为了相应地修改原始 DF ,请使用它: df = df.assign(...) ,因为它目前不支持 inplace 操作 .
df = df.assign(...)
inplace
@ emunsing的answer非常适合添加多个列,但我无法让它在python 2.7中为我工作 . 相反,我发现这有效:
mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
如果要从列表中添加列名称
df=pd.DataFrame() a=['col1','col2','col3','col4'] for i in range(len(a)): df[a[i]]=np.nan
6 回答
如果我理解正确,任务应该填写:
要添加到DSM的答案并在this associated question上构建,我将该方法分为两种情况:
添加单个列:只需为新列指定空值,例如
df['C'] = np.nan
添加多列:我建议使用
.reindex(columns=[...])
method of pandas将新列添加到数据框的列索引中 . 这也适用于添加多个新行 .以下是添加多个列的示例:
要么
您也可以将新的(空)数据帧连接到现有的数据帧,但这对我来说并不像pythonic :)
一个更简单的解决方案是:
其中“header_list”是您要显示的 Headers 列表 .
列表中包含的任何未在数据框中找到的 Headers 将添加下面的空白单元格 .
因此,如果
然后将c和d添加为具有空白单元格的列
从
v0.16.0
开始,DF.assign()可用于将新列(单个/多个)分配给DF
. 这些列按字母顺序插入DF
的末尾 .与在直接对返回的数据帧执行一系列链接操作的情况下的简单赋值相比,这变得有利 .
考虑@DSM演示的相同
DF
示例:请注意,这将返回包含所有先前列以及新创建的列的副本 . 为了相应地修改原始
DF
,请使用它:df = df.assign(...)
,因为它目前不支持inplace
操作 .@ emunsing的answer非常适合添加多个列,但我无法让它在python 2.7中为我工作 . 相反,我发现这有效:
如果要从列表中添加列名称