gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:58:40 24 4
gpt4 key购买 nike

假设我有一个 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

关于python - 如果列不存在,则将默认值添加为列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46393729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com