如果不存在列,则将默认值添加为列

约瑟芬·穆勒(Josephine Moeller)

假设给了我一个pandas DataFrame,我想确保我有一些列,还有一些默认值,如果它们不存在的话我可以设置它们。我可以执行以下操作:

def add_default_values_and_print(df):
    out_df = df.copy()
    def_values = { 'a':1, 'b':0 }
    for k, v in def_values.iteritems():
        if k not in df:
            out_df[k] = v
    print(out_df.to_csv())

但是,这似乎很笨拙,并且感觉应该有一种更好的,更多的pandas方法来做到这一点。如果我将默认值放在自己的框架中并进行联接,则第一行将具有默认值,其余行将具有NaN:

In [1]: import pandas as pd

In [2]: df = pd.DataFrame([[0,1], [2,3]])

In [3]: defaults_df = pd.DataFrame({ 'a':[1], 'b':[0] })

In [4]: df.join(defaults_df, how='outer')
Out[4]:

   0  1    a    b
0  0  1  1.0  0.0
1  2  3  NaN  NaN

这不是预期的输出,但是我觉得应该可以实现这样的工作。

有什么建议么?


编辑:从@Zero的评论,以下应该工作:

def add_default_values_and_print(df):
    def_values = { 'a':1, 'b':0 }
    missing_values = {
        k:v for k,v in def_values.iteritems()
        if k not in df
    }
    print(df.assign(**missing_values).to_csv())

几种使用方式 assign

In [3405]: def_values = {'a':1, 'b':0}

In [3406]: df.assign(**{k: def_values[k] for k in def_values if k not in df})
Out[3406]:
   0  1  a  b
0  0  1  1  0
1  2  3  1  0

In [3407]: def_s = pd.Series(def_values)

In [3408]: def_s
Out[3408]:
a      1
b      0
dtype: int64

In [3409]: df.assign(**def_s[~def_s.index.isin(df)])
Out[3409]:
   0  1  a  b
0  0  1  1  0
1  2  3  1  0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫:添加列(如果不存在)

添加列(如果不存在)

如果键不存在,则字典返回默认值

cassandra添加列(如果不存在)

EF迁移代码优先。如果列不存在,则将列添加到数据库

Redshift:添加列(如果不存在)

检查值是否存在于集合或数组中,如果不存在,则将其添加

如果options对象不存在,则将boolean设置为默认值

熊猫:选择列,如果不存在则默认

添加列(如果不存在)

不存在变量的默认值

如果数组中不存在密钥,则在json中搜索密钥添加默认值

如果字段不存在,则获取字段值;如果不存在,则获取默认值,DRF

如何添加列(如果不存在)和更新值

C#AutoMapper-如果源中不存在默认值,则在dest属性中设置默认值

如果不存在值,如何在枚举中获取默认值

ssis如果源文件中不存在,则使用默认值添加列

如果条目不存在,则mysql设置默认值

如果不存在,如何使Javascript参数默认为默认值?

如果缺少的属性不存在,则将其添加为具有空白值的对象

MySql使用默认值(如果搜索不存在)

如果键不存在,则使用默认值进行插值

如果不存在参数,则提供默认值

对象属性中的默认值(如果不存在)

如果Lodash模板中不存在给定属性,如何添加默认值

如果不存在,则在日期范围内添加默认值(SQL - BIGQUERY)

如果新列不存在,如何添加新列

如果特定列中不存在值,则将数据插入数据库

如果存在,如何在 Slick 中增加一列,否则将其插入默认值?