如何向一个空的pandas数据框添加列?

36

我有一个空的数据框

df=pd.DataFrame(columns=['a'])

由于某些原因,我希望生成另一个名为df2的空数据框,它具有两列名为'a'和'b'。

如果我执行以下操作:

df.columns=df.columns+'b'

它不起作用(我把列重命名为“ab”), 以下内容也同样无效

df.columns=df.columns.tolist()+['b']

如何将一个单独的列“b”添加到df中,同时使df.empty始终保持为True?使用.loc也不可能。
   df.loc[:,'b']=None

当它返回时

  Cannot set dataframe with no defined index and a scalar

3
将DataFrame的副本df2创建为与原始DataFrame df相同的副本,然后将df2中的'b'列设置为空字符串。 - famargar
实际上它确实添加了一个元素,但为什么''没有将一个元素添加到索引中呢?空字符串仍然是一个字符串。 - 00__00__00
这是我自己一直在想的事情...抱歉,但我不知道答案! - famargar
1
df['b'] = None ? - Sumit Jha
请添加多个空列到 Pandas 数据框中,参考链接 https://dev59.com/oV0Z5IYBdhLWcg3w6jwe。 - EdChum
5个回答

49

下面是向空数据框添加空列的几种方法:

df=pd.DataFrame(columns=['a'])
df['b'] = None
df = df.assign(c=None)
df = df.assign(d=df['a'])
df['e'] = pd.Series(index=df.index)   
df = pd.concat([df,pd.DataFrame(columns=list('f'))])
print(df)

输出:

Empty DataFrame
Columns: [a, b, c, d, e, f]
Index: []

我希望它有所帮助。


1
参见下面的答案,df2 = df.join(pd.DataFrame(columns=['b'])) - MrR

19
如果您只是执行df['b'] = None,那么df.empty仍然是True,并且df为:
Empty DataFrame
Columns: [a, b]
Index: []

编辑: 要从df的列创建一个空的df2并添加新列,您可以执行以下操作:

df2 = pd.DataFrame(columns = df.columns.tolist() + ['b', 'c', 'd'])

8
如果您想同时添加多个列,您也可以重新索引。
new_cols = ['c', 'd', 'e', 'f', 'g']
df2 = df.reindex(df.columns.union(new_cols), axis=1)

#Empty DataFrame
#Columns: [a, c, d, e, f, g]
#Index: []

是的,我更喜欢使用 union。这样可以避免在 df 中出现两个名称相似的列的可能性。 - ALollz
@piRSquared 我认为使用concat函数可以将“reindex”和“union”合并。 - BENY
@Wen 我相信你是对的。然而,这需要构建一个新的数据框只是为了连接(concat)。如果没有必要,我倾向于避免构建新的pandas对象。 - piRSquared

6
这是一种方法:
df2 = df.join(pd.DataFrame(columns=['b']))

这种方法的优点是您可以添加任意数量的列而无需显式循环。
此外,这满足了您的要求,即如果没有数据存在,则df.empty评估为True

为什么你必须复制? - MrR
@MrR,问题陈述如下:“由于某种原因,我想要生成df2,另一个空数据框”。 - jpp
df2 = df.join(pd.DataFrame(columns=['b'])) is sufficient. No need for df2 = df.copy() - MrR
点赞了。顺便说一句:这应该添加到第一个回答中——它在那里漏掉了,而且这是最优雅的方法之一(如果不是最优雅的)。 - MrR

4
你可以使用 concat 来实现:
df=pd.DataFrame(columns=['a'])
df
Out[568]: 
Empty DataFrame
Columns: [a]
Index: []

df2=pd.DataFrame(columns=['b', 'c', 'd'])
pd.concat([df,df2])
Out[571]: 
Empty DataFrame
Columns: [a, b, c, d]
Index: []

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接