Python 筛选单元格中包含数组的数据帧

Python 筛选单元格中包含数组的数据帧,python,arrays,pandas,dataframe,loc,Python,Arrays,Pandas,Dataframe,Loc,我有一个熊猫数据框,其中有一列'htgt',该列由内部带有数字的数组组成。数组的大小不是恒定的。数据示例如下: 11 [16, 69] 12 [61, 79] 13 [10, 69] 14 [81] 15 [12, 30, 45, 68] 16 [10, 76] 17

我有一个熊猫数据框,其中有一列
'htgt'
,该列由内部带有数字的数组组成。数组的大小不是恒定的。数据示例如下:

11                  [16, 69]
12                  [61, 79]
13                  [10, 69]
14                      [81]
15          [12, 30, 45, 68]
16                  [10, 76]
17                   [9, 39]
18              [67, 69, 77]

例如,我如何筛选所有具有数字10的行。

您可以通过首先使用列表理解创建布尔索引来做到这一点:

mask = [(10 in x) for x in df['htgt']]
df[mask]
或一行,如果您愿意:

df.loc[[(10 in x) for x in df['htgt']]]
[输出]

htgt
13  [10, 69]
16  [10, 76]

不要在
pandas
列中存储类型
list
,这样做效率不高,而且会使数据更难交互。只需将列表展开为列:

out = pd.DataFrame(df.htgt.values.tolist())

    0     1     2     3
0  16  69.0   NaN   NaN
1  61  79.0   NaN   NaN
2  10  69.0   NaN   NaN
3  81   NaN   NaN   NaN
4  12  30.0  45.0  68.0
5  10  76.0   NaN   NaN
6   9  39.0   NaN   NaN
7  67  69.0  77.0   NaN
现在,您可以使用高效的
pandas
操作来查找
10
的行:

out.loc[out.eq(10).any(1)]

如果您坚持结果为
列表
格式,则可以使用
堆栈
agg

out.loc[out.eq(10).any(1)].stack().groupby(level=0).agg(list)

输出:

    A   B
2   13  [10, 69]
5   16  [10, 76]

数组中是否存在数字10。我想要数组中所有具有特定数字的行。你能改变你的示例吗。。。?数字10没有出现在任何数组中
2    [10.0, 69.0]
5    [10.0, 76.0]
dtype: object
def check(list):
    return '10' in list

df[df['B'].astype(list).apply(check)]
    A   B
2   13  [10, 69]
5   16  [10, 76]