【问题标题】:Multiple insert columns if not exist pandas如果不存在熊猫,则插入多个列
【发布时间】:2020-10-08 11:46:32
【问题描述】:

我有以下df

list_columns = ['A', 'B', 'C']
list_data = [
    [1, '2', 3],
    [4, '4', 5],
    [1, '2', 3],
    [4, '4', 6]
    ]
df = pd.DataFrame(columns=list_columns, data=list_data)

我想检查是否存在多个列,如果不存在则创建它们。

示例: 如果 B、C、D 不存在,则创建它们(对于上面的 df,它将仅创建 D 列) 我知道如何用一栏做到这一点:

if 'D' not in df:
    df['D']=0

有没有办法测试我的所有列是否存在,如果不存在,则创建缺少的列?并且不要为每一列做一个 if

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    这里不需要循环 - 使用 DataFrame.reindex 和 Index.union:

    cols = ['B','C','D']
    
    df = df.reindex(df.columns.union(cols, sort=False), axis=1, fill_value=0)
    print (df)
       A  B  C  D
    0  1  2  3  0
    1  4  4  5  0
    2  1  2  3  0
    3  4  4  6  0
    

    【讨论】:

      【解决方案2】:

      再补充一点,您可以使用assign 和** 解包来解包列和列表之间的set diff。

      import numpy as np
      cols = ['B','C','D','E']
      
      df.assign(**{col : 0 for col in np.setdiff1d(cols,df.columns.values)})
      
         A  B  C  D  E
      0  1  2  3  0  0
      1  4  4  5  0  0
      2  1  2  3  0  0
      3  4  4  6  0  0
      

      【讨论】:

        猜你喜欢
        • 2018-05-19
        • 2018-09-17
        • 2012-12-17
        • 1970-01-01
        • 2023-03-21
        • 2014-06-11
        • 1970-01-01
        • 1970-01-01
        • 2017-04-24
        相关资源
        最近更新 更多