给定这种类型的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就是其中之一。查看源代码,当使用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