【问题标题】:How to add columns to an empty pandas dataframe?如何将列添加到空的熊猫数据框中?
【发布时间】:2018-10-26 14:09:55
【问题描述】:

我有一个空的dataframe

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

出于某种原因,我想生成另一个空数据框 df2,其中包含两列“a”和“b”。

如果我这样做了

df.columns=df.columns+'b'

它不起作用(我将列重命名为“ab”) 以下内容也没有

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

如何将单独的列'b'添加到df,并且df.emtpy继续成为True

使用 .loc 也是不可能的

   df.loc[:,'b']=None

当它返回时

  Cannot set dataframe with no defined index and a scalar

【问题讨论】:

  • df2=df.copy() 后跟 df2['b']="" ?
  • 确实如此。但是为什么''不向索引添加一个元素呢?并且空字符串仍然是字符串
  • 这是我自己一直在想的事情......对不起,我不知道答案!
  • df['b'] = None ?

标签: python pandas dataframe


【解决方案1】:

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

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

希望对你有帮助。

【讨论】:

  • 另请参阅df2 = df.join(pd.DataFrame(columns=['b'])),按照下面的答案。
【解决方案2】:

如果你只是做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'])

【讨论】:

    【解决方案3】:

    如果你想同时添加多个列,你也可以重新索引。

    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 中有两个类似名称的列的可能性
    • @piRSquared 我想也许使用 concat 可以结合 reindexunion
    • @Wen 我相信你是对的。但是,这需要构建一个新的数据框来简单地连接。如果没有必要,我倾向于避免构造新的 pandas 对象。
    【解决方案4】:

    这是一种方式:

    df2 = df.join(pd.DataFrame(columns=['b']))
    

    此方法的优点是您可以添加任意数量的列而无需显式循环。

    此外,如果不存在数据,这满足了您对df.empty 评估为True 的要求。

    【讨论】:

    • 为什么一定要复制?
    • @MrR,问题说明:for some reason I want to generate df2, another empty dataframe,
    • df2 = df.join(pd.DataFrame(columns=['b'])) 就足够了。不需要df2 = df.copy()
    • 赞成。 PS:这应该添加到第一个答案中-那里提供的那个漂亮的纲要中缺少它,它是最优雅的方式之一(如果不是最优雅的话)。
    【解决方案5】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-08
      • 1970-01-01
      • 2016-05-04
      • 1970-01-01
      • 2018-12-14
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      相关资源
      最近更新 更多