【问题标题】:KeyError exception with pandas dataframe colunm熊猫数据框列的 KeyError 异常
【发布时间】:2021-04-11 07:10:39
【问题描述】:

想象一个想要制作一个接受两种DataFrames的函数 - 带有“Value”列和没有。 (比如说,这是来自不同来源的资产数据,有些来源没有提供有关价值的信息。)

函数foo 应该根据数据框运行不同的过程,例如,将"Value" 复制到新列“B”或使用1 添加新列“B”。一个玩具示例如下。

import pandas as pd

df1 = pd.DataFrame({"A":["one", "two", "three"]})
df2 = pd.DataFrame({"A":["one", "two", "three"], "Value":[1, 2, 3]})

df1 的情况下,处理KeyError: 'Value' 的最佳方法是什么。

def foo(df, col_name="Value"):

    <if col_name exists>
        df["B"] = df[col_name] 
    <else>
        df["B"] = 1
    return df

【问题讨论】:

    标签: python pandas dataframe error-handling


    【解决方案1】:

    试试:

    df['B'] = df.get('Value', 1)
    

    或等效

    df['B'] = df['Value'] if 'Value' in df else 1
    

    【讨论】:

    • 谢谢。在这种情况下(比如说,如果情况更复杂),是否有任何理由诉诸 try-except 结构?
    • @garej try-except 是捕获异常的绝佳工具(呃,它天生就是为了这样做)。在这种情况下它当然可以工作,即使在更一般的设置中,如果你知道你在做什么。然而,我了解到,在研发中,它通常提供的附加价值很小,同时使错误捕获变得不必要地困难。也就是说,许多系统工程师建议我在生产中使用它们,以免最终用户遇到尴尬的错误。 TLDR:当然,它在这里工作,但我更喜欢答案中的命令:D。
    猜你喜欢
    • 1970-01-01
    • 2021-07-31
    • 2015-09-19
    • 2021-09-17
    • 1970-01-01
    • 2021-11-10
    • 1970-01-01
    • 2020-07-26
    • 2020-06-03
    相关资源
    最近更新 更多