Python Pandas : Select 数据并忽略 KeyErrors
Python Pandas : Select data and ignoring KeyErrors
注意:我的问题不是 ,而是更微妙的问题。
假设我有一个看起来像这样的数据框
df =
A B C
0 3 3 1
1 2 1 9
df[["A", "B", "D"]]
将引发 KeyError
。
有没有pythonpandas的方法让df[["A", "B", "D"]] == df[["A", "B"]]
? (即:只有 select 存在的列。)
一个解决方案可能是
good_columns = list(set(df.columns).intersection(["A", "B", "D"]))
mydf = df[good_columns]
但这有两个问题:
- 它笨重且不优雅。
mydf.columns
的排序可能是 ["A", "B"]
或 ["B", "A"]
。
您可以使用 filter
,这将忽略任何额外的键:
df.filter(["A","B","D"])
A B
0 3 3
1 2 1
您可以使用条件列表理解:
target_cols = ['A', 'B', 'D']
>>> df[[c for c in target_cols if c in df]]
A B
0 3 3
1 2 1
注意:我的问题不是
假设我有一个看起来像这样的数据框
df =
A B C
0 3 3 1
1 2 1 9
df[["A", "B", "D"]]
将引发 KeyError
。
有没有pythonpandas的方法让df[["A", "B", "D"]] == df[["A", "B"]]
? (即:只有 select 存在的列。)
一个解决方案可能是
good_columns = list(set(df.columns).intersection(["A", "B", "D"]))
mydf = df[good_columns]
但这有两个问题:
- 它笨重且不优雅。
mydf.columns
的排序可能是["A", "B"]
或["B", "A"]
。
您可以使用 filter
,这将忽略任何额外的键:
df.filter(["A","B","D"])
A B
0 3 3
1 2 1
您可以使用条件列表理解:
target_cols = ['A', 'B', 'D']
>>> df[[c for c in target_cols if c in df]]
A B
0 3 3
1 2 1