Answers:
如果我理解正确,则应填写作业:
>>> 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
df
为空,则可能要使用df['new'] = pd.Series()
(请参阅下面的答案)
为了增加DSM的答案并以这个相关问题为基础,我将该方法分为两种情况:
添加单个列:只需将空值分配给新列,例如 df['C'] = np.nan
添加多个列:我建议使用.reindex(columns=[...])
pandas方法将新列添加到数据框的列索引中。这也适用于使用添加多个新行.reindex(rows=[...])
。请注意,较新版本的Pandas(v> 0.20)允许您指定axis
关键字,而不是显式分配给columns
或rows
。
这是添加多列的示例:
mydf = mydf.reindex(columns = mydf.columns.tolist() + ['newcol1','newcol2'])
要么
mydf = mydf.reindex(mydf.columns.tolist() + ['newcol1','newcol2'], axis=1) # version > 0.20.0
您还可以始终将新的(空)数据框连接到现有数据框,但这对我来说并不像pythonic那样:)
version >= 0.20.0
删除DataFrame并将新列添加为行的示例。version < 0.20.0
在Pandas版本上效果很好的示例0.24.1
, axis=1
在version = 0.25
。我试图修改您的答案以包括更新的版本,但被@kenlukas和@il_raffa拒绝。我希望每个人都在努力理解为什么您的答复对他们不起作用(就像我以前那样),至少会遇到此评论。
一个更简单的解决方案是:
df = df.reindex(columns = header_list)
其中“ header_list”是要显示的标题的列表。
列表中包含的,在数据框中尚未找到的所有标头都将添加以下空白单元格。
因此,如果
header_list = ['a','b','c', 'd']
然后将c和d添加为具有空白单元格的列
以开始v0.16.0
,DF.assign()
可用于为分配新列(单/多)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
请注意,这将返回一个包含所有先前列以及新创建列的副本。为了对原件DF
进行相应的修改,请像:df = df.assign(...)
一样使用它,因为它inplace
当前不支持操作。
如果要从列表中添加列名
df=pd.DataFrame()
a=['col1','col2','col3','col4']
for i in a:
df[i]=np.nan
下面的代码解决了“如何向现有数据帧中添加n个空列”的问题。为了将针对类似问题的解决方案集中在一个地方,我在这里添加它。
方法1(使用1-64的列名创建64个其他列)
m = list(range(1,65,1))
dd=pd.DataFrame(columns=m)
df.join(dd).replace(np.nan,'') #df is the dataframe that already exists
方法2(使用1-64的列名称创建64个其他列)
df.reindex(df.columns.tolist() + list(range(1,65,1)), axis=1).replace(np.nan,'')
你可以做
df['column'] = None #This works. This will create a new column with None type
df.column = None #This will work only when the column is already present in the dataframe
可以用来df.insert(index_to_insert_at, column_header, init_value)
在特定索引处插入新列。
cost_tbl.insert(1, "col_name", "")
上面的语句将在第一列之后插入一个空列。
N/A
?