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]