【问题标题】:Python Pandas : Select data and ignoring KeyErrorsPython Pandas:选择数据并忽略 KeyErrors
【发布时间】:2015-11-30 05:51:25
【问题描述】:

注意:我的问题不是this one,而是更微妙的问题。

假设我有一个看起来像这样的数据框

df = 
    A     B    C
0   3     3    1
1   2     1    9

df[["A", "B", "D"]] 将引发KeyError

有没有 python pandas 方法让df[["A", "B", "D"]] == df[["A", "B"]]? (即:只选择存在的列。)

一个解决方案可能是

good_columns = list(set(df.columns).intersection(["A", "B", "D"]))
mydf = df[good_columns]

但这有两个问题:

  • 它笨重且不雅。
  • mydf.columns 的排序可能是["A", "B"]["B", "A"]

【问题讨论】:

    标签: python pandas dataframe keyerror


    【解决方案1】:

    您可以使用filter,这将忽略任何额外的键:

    df.filter(["A","B","D"])
        A     B  
    0   3     3   
    1   2     1   
    

    【讨论】:

    • 谢谢。我希望 pandas 文档有每个函数的使用示例,就像 scikit-learn 一样。
    • 为什么不考虑自己提交一些,文档是开始为开源项目做贡献的好方法
    【解决方案2】:

    您可以使用条件列表推导:

    target_cols = ['A', 'B', 'D']
    >>> df[[c for c in target_cols if c in df]]
       A  B
    0  3  3
    1  2  1
    

    【讨论】:

    • 看起来这是O(n) 检查是否c in df。我会坚持@maxymoo 的回答。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多