给定这种类型的df:

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]
)

我试图按名称选择一些列,如:
b = A[[col for col in A if "0 " in col or "name" in col]]

但是,我犯了个错误:
TypeError:“datetime.time”类型的参数不可iterable
当某些列属于datetime.time类型时,如何按列名分割df?
另一个路径是首先选择名称为字符串的列,然后我可以使用我最初想要的过程。

最佳答案

Pandas提供了一个名为filter的方法,该方法根据列的名称选择特定的列。您可以用不同的方式选择这些列,regex就是其中之一。查看源代码,当使用likeregex但不使用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

09-10 15:30
查看更多