Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何向空数据框添加列?_Python_Pandas_Dataframe - Fatal编程技术网

Python 如何向空数据框添加列?

Python 如何向空数据框添加列?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个空的数据框 df=pd.DataFrame(columns=['a']) 出于某种原因,我想生成df2,另一个空数据帧,有两列“a”和“b” 如果我这样做 df.columns=df.columns+'b' 它不起作用(我将列重命名为'ab') 以下情况也不例外 df.columns=df.columns.tolist()+['b'] 如何在df中添加一个单独的列“b”,并且df.emtpy保持True 使用.loc也是不可能的 df.loc[:,'b']=None 当它回

我有一个空的
数据框

df=pd.DataFrame(columns=['a'])
出于某种原因,我想生成df2,另一个空数据帧,有两列“a”和“b”

如果我这样做

df.columns=df.columns+'b'
它不起作用(我将列重命名为'ab') 以下情况也不例外

df.columns=df.columns.tolist()+['b']
如何在df中添加一个单独的列“b”,并且
df.emtpy
保持
True

使用.loc也是不可能的

   df.loc[:,'b']=None
当它回来的时候

  Cannot set dataframe with no defined index and a scalar

如果只执行
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'])
这是一种方式:

df2 = df.join(pd.DataFrame(columns=['b']))
此方法的优点是可以添加任意数量的列,而无需显式循环


此外,如果不存在数据,这满足了
df.empty
计算为
True
的要求。

如果要同时添加多个列,还可以重新编制索引

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: []

以下是将空列添加到空数据帧的几种方法:

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: []

希望有帮助。

您可以使用
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: []

df2=df.copy()后跟df2['b']=“”?实际上是这样。但是为什么“”不向索引中添加一个元素呢?空字符串仍然是字符串这是我一直在想的事情…对不起,我不知道答案
df['b']=None
?相关:是的,我更喜欢
union
。它避免了在
df
@piRSquared中有两个类似名称的列的可能性,我想也许使用concat可以将
reindex
union
@Wen结合起来,我相信你是对的。然而,这需要构造一个新的数据帧来进行连接。如果没有必要,我倾向于避免构造新的pandas对象。为什么要复制?@MrR,问题是:
出于某种原因,我想生成另一个空数据帧df2,
df2=df.join(pd.dataframe(columns=['b'])
就足够了。不需要
df2=df.copy()
@MrR,公平点,更新了我的答案。向上投票。PS:这应该被添加到第一个答案中——它在这里展示的精美概要中缺失了,这是最优雅的方式之一(如果不是最优雅的话)。另请参见下面的答案
df2=df.join(pd.DataFrame(columns=['b'])