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

kjo*_*kjo 211 python pandas

将空列添加到pandas DataFrame对象的最简单方法是什么?我偶然发现的最好的就像是

df['foo'] = df.apply(lambda _: '', axis=1)
Run Code Online (Sandbox Code Playgroud)

是否有一种不那么不正常的方法?

DSM*_*DSM 348

如果我理解正确,任务应该填写:

>>> import numpy as np
>>> import pandas as pd
>>> 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
Run Code Online (Sandbox Code Playgroud)

  • 如何添加多个空列? (4认同)
  • @M.Mariscal `df[["newcol1","newcol2","newcol3"]] = None`。 (3认同)
  • 这个答案只是为我创建了新行。 (2认同)
  • 如果“df”为空,您可能需要使用“df['new'] = pd.Series()”(请参阅​​下面的我的答案) (2认同)

emu*_*ing 37

为了添加到DSM的答案并在此相关问题的基础上,我将该方法分为两种情况:

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

  • 添加多列:我建议使用.reindex(columns=[...]) pandas方法将新列添加到dataframe的列索引中.这也适用于添加多个新行.

以下是添加多个列的示例:

mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
Run Code Online (Sandbox Code Playgroud)

要么

mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1)  # version > 0.20.0
Run Code Online (Sandbox Code Playgroud)

您也可以将新的(空)数据帧连接到现有的数据帧,但这对我来说并不像pythonic :)

  • 版本> = 0.20.0的示例删除DataFrame并将新列添加为行。版本<0.20.0的示例在Pandas版本0.24.1上运行良好 (3认同)

Car*_*ten 33

我喜欢:

df['new'] = pd.Series(dtype='your_required_dtype')
Run Code Online (Sandbox Code Playgroud)

如果您有一个空的数据框,此解决方案可确保不NaN添加仅包含的新行。

指定dtype不是绝对必要的,但是较新的 Pandas 版本会产生一个DeprecationWarningif 未指定。

  • 这是插入具有预定义数据类型的新列的最佳方法。 (3认同)

小智 32

一个更简单的解决方案是:

df = df.reindex(columns = header_list)                
Run Code Online (Sandbox Code Playgroud)

其中"header_list"是您要显示的标题列表.

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

因此,如果

header_list = ['a','b','c', 'd']
Run Code Online (Sandbox Code Playgroud)

然后将c和d添加为具有空白单元格的列

  • 更确切地说,色谱柱将添加NaN. (2认同)

Nic*_*eli 18

从开始v0.16.0,DF.assign()可用于为a分配新列(单个/多个)DF.这些列按字母顺序插入到结尾处DF.

与在直接对返回的数据帧执行一系列链接操作的情况下的简单赋值相比,这变得有利.

考虑DF@DSM演示的相同示例:

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
Run Code Online (Sandbox Code Playgroud)

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


Ank*_*our 12

df["C"] = ""
df["D"] = np.nan
Run Code Online (Sandbox Code Playgroud)

作业会给你这个警告SettingWithCopyWarning

尝试在 DataFrame 的切片副本上设置一个值。尝试使用 .loc[row_indexer,col_indexer] = value 代替

所以最好使用insert

df.insert(index, column-name, column-value)
Run Code Online (Sandbox Code Playgroud)

如果这个回答对你有帮助别忘了点赞哦


Joy*_*der 7

如果要从列表中添加列名

df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
    df[i]=np.nan
Run Code Online (Sandbox Code Playgroud)


小智 6

可以用来df.insert(index_to_insert_at, column_header, init_value)在特定索引处插入新列。

cost_tbl.insert(1, "col_name", "") 
Run Code Online (Sandbox Code Playgroud)

上面的语句将在第一列之后插入一个空列。


edg*_*ase 5

@emunsing 的答案对于添加多列来说真的很酷,但我无法在 python 2.7 中为我工作。相反,我发现这有效:

mydf = mydf.reindex(columns = np.append( mydf.columns.values, ['newcol1','newcol2'])
Run Code Online (Sandbox Code Playgroud)

  • 请不要使用Python 2.7... (2认同)