Python 如果数据类型为元组,如何筛选数据帧?

Python 如果数据类型为元组,如何筛选数据帧?,python,pandas,Python,Pandas,我有一个数据帧,出于某种原因,这个数据帧的数据类型是tuple 让我举一个例子: In [13]: df = pd.DataFrame(np.reshape(range(25), (5,5))) In [15]: df[3] = [(1,2), (2,3), (4,5), (1,2), (-1, 1)] In [16]: df Out[16]: 0 1 2 3 4 0 0 1 2 (1, 2) 4 1 5 6 7 (2, 3

我有一个数据帧,出于某种原因,这个数据帧的数据类型是tuple

让我举一个例子:

In [13]: df = pd.DataFrame(np.reshape(range(25), (5,5)))
In [15]: df[3] = [(1,2), (2,3), (4,5), (1,2), (-1, 1)]
In [16]: df
Out[16]: 
    0   1   2        3   4
0   0   1   2   (1, 2)   4
1   5   6   7   (2, 3)   9
2  10  11  12   (4, 5)  14
3  15  16  17   (1, 2)  19
4  20  21  22  (-1, 1)  24
我想保持那些第一个元素大于1的行

也就是说,预期结果是:

In [20]: df.loc[[1, 2]]
Out[20]: 
    0   1   2       3   4
1   5   6   7  (2, 3)   9
2  10  11  12  (4, 5)  14

有什么好方法吗?

可以使用pandas.DataFrame.aggregate()和lambda函数作为参数。这将返回tuple的第一个元素

import pandas as pd
import numpy as np
df = pd.DataFrame(np.reshape(range(25), (5,5)))
df[3] = [(1,2), (2,3), (4,5), (1,2), (-1, 1)]
df1=df[df[3].aggregate(lambda x:x[0])>1]
print(df1)
可以访问列表、元组中的元素,而不仅仅限于字符串:

df.loc[df[3].str[0] > 1]

    0   1   2     3     4
1   5   6   7   (2, 3)  9
2   10  11  12  (4, 5)  14

试试看:
df.loc[df[3].str[0]>1]
@sammywemmy的评论是正确的方法。最快最干净。此外,尽管命名为
.str
方法,但在这种情况下,
df[3].str[0].dtypes
实际上是
int64
,因此比较是正确的,而且速度非常快。请把它作为答案贴出来。这是正确的。顺便说一句,我经常使用
df.applymap(type)
检查所有单元格的实际类型(特别是对于在
df.dtypes
中仅显示为
'object'
的列)。在本例中,您可以验证col 3的所有值是否都是具有
(df.applymap(type)=tuple.all()[3]
的元组。