2017-02-07 12 views
3

Учитывая ФР этого типа:Как отрезать df именем col, когда некоторые столбцы имеют тип datetime.time?

A = pd.DataFrame(
    [[1, 5, 2, 8, 2], [2, 4, 4, 20, 2], [3, 3, 1, 20, 2], [4, 2, 2, 1, 0], [5, 1, 4, -5, -4], 
    [1, 5, 2, 2, -20], [2, 4, 4, 3, 0], [3, 3, 1, -1, -1], [4, 2, 2, 0, 0], [5, 1, 4, 20, -2]], 
    columns=[datetime.time(8, 20), datetime.time(8, 30), '0 009', 'name', datetime.time(9, 0)], 
    index=[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
) 

Im пытается выбрать несколько столбцов по имени, как:

b = A[[col for col in A if "0 " in col or "name" in col]] 

Однако я получил ошибку:

TypeError: argument of type 'datetime.time' is not iterable

Как я могу отрезать df по имени столбца, когда некоторые из столбцов имеют тип datetime.time?

Альтернативный путь - это выбрать сначала столбцы, имена которых являются строкой, а затем я могу использовать процедуру, которую я изначально предназначил.

ответ

2

Pandas предлагает метод под названием filter, который выбирает конкретные столбцы на основе их имени. Вы можете выбирать эти столбцы по-разному, если одним из них является регулярное выражение. Рассматривая исходный код, столбцы преобразуются в строки при использовании like или regex, но не items, поэтому это должно работать для имен столбцов datetime.

A.filter(regex='0 |name') 

    0 009 name 
1  2  8 
2  4 20 
3  1 20 
4  2  1 
5  4 -5 
6  2  2 
7  4  3 
8  1 -1 
9  2  0 
10  4 20