2015-11-30 3 views
2

Примечание: мой вопрос не this one, но что-то немного более тонкое.Python Pandas: выберите данные и игнорируйте KeyErrors

Скажем, у меня есть dataframe, который выглядит, как это

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"].

ответ

2

Вы можете использовать filter, это будет просто игнорировать любые дополнительные клавиши:

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

Спасибо. Я хочу, чтобы в документации по pandas были примеры использования для каждой функции, так же как scikit-learn. – hlin117

+1

Почему бы вам не подумать о том, чтобы представить себя самостоятельно, документация - отличный способ начать работу с проектами с открытым исходным кодом. – maxymoo

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 
+0

Похоже, это проверка 'O (n)', чтобы увидеть, является ли 'c in df'. Я буду придерживаться ответа @ maxymoo. Благодаря! – hlin117

Смежные вопросы