python – 包含数组条目的列的pandas查询
发布时间:2020-12-20 11:06:32 所属栏目:Python 来源:网络整理
导读:ykp.dataOut[182]: state action reward 0 [41] 5 59 1 [5] 52 48 2 [46] 35 59 3 [42] 16 12 4 [43] 37 48 5 [36] 5 59 6 [49] 52 48 7 [39] 11 23 我想在状态条目中找到匹配[42]的行,所以我跑了 ykp.data.query('state == [42]') 但我明白了 Empty DataFra
ykp.data Out[182]: state action reward 0 [41] 5 59 1 [5] 52 48 2 [46] 35 59 3 [42] 16 12 4 [43] 37 48 5 [36] 5 59 6 [49] 52 48 7 [39] 11 23 我想在状态条目中找到匹配[42]的行,所以我跑了 ykp.data.query('state == [42]') 但我明白了 Empty DataFrame Columns: [state,action,reward] Index: [] 当我应该看到[42],16,12. 有人可以告诉我如何解决这个问题吗?我需要将状态值存储为数组. 解决方法
最好在这里避免使用pd.Series.apply.相反,您可以使用itertools.chain构建常规NumPy数组.然后将数组与整数进行比较以形成用于索引的布尔数组:
from itertools import chain df = pd.DataFrame(np.random.randint(0,100,size=(100000,1)),columns=['state']) df = df.assign(state=df.state.apply(lambda x: [x]),axis=1) def wen(df): df.state=df.state.astype(str) return df.query("state == '[42]'") %timeit df[np.array(list(chain.from_iterable(df['state'].values))) == 42] # 14.2 ms %timeit df[df.state.apply(tuple) == (42,)] # 41.9 ms %timeit df.loc[df.state.apply(lambda x: x==[42])] # 33.9 ms %timeit wen(df) # 19.9 ms 更好的是,不要在数据框中使用列表.只需使用常规的int系列.这将是内存和性能效率. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |