Python 查找包含列的正确设置值的行
我在df中的一列包含表示集合的字符串Python 查找包含列的正确设置值的行,python,pandas,Python,Pandas,我在df中的一列包含表示集合的字符串 tables,n_estimators,min_samples_split,min_samples_leaf,max_depth "{'school.csv'}",1024,16,4,8 "{'school.csv', 'univeristy.csv', 'work'}",1024,32,4,16 "{'univeristy.csv'}",1024,4,4,16 我试图找到一行对应于一个特定的集合值,如下所示: hp_row = hp_df.loc[set
tables,n_estimators,min_samples_split,min_samples_leaf,max_depth
"{'school.csv'}",1024,16,4,8
"{'school.csv', 'univeristy.csv', 'work'}",1024,32,4,16
"{'univeristy.csv'}",1024,4,4,16
我试图找到一行对应于一个特定的集合值,如下所示:
hp_row = hp_df.loc[set(eval(hp_df['tables'].to_numpy())) == {school.csv'}]
但这显然不起作用
ValueError: source code string cannot contain null bytes
有关于如何正确操作的帮助吗
此处hp_行的预期值为
"{'school.csv'}",1024,16,4,8
请注意,我要比较的是集合对象,而不是字符串
谢谢
编辑:
我的临时解决方案(但正在寻找更紧凑和优化的解决方案):
IIUC,您可以使用
ast.literal\u eval
将列表
从字符串转换为集合,并将其分配给s
。接下来,使用loc
和s
进行切片
import ast
s = df.tables.apply(ast.literal_eval)
df.loc[s == {'school.csv'}]
Out[109]:
tables n_estimators min_samples_split min_samples_leaf \
0 {'school.csv'} 1024 16 4
max_depth
0 8
如果要使用包含require元素的集合切片行:
hp_df[hp_df.apply(lambda row: 'school.csv' in eval(row['tables']),axis=1)]
hp_df[hp_df.apply(lambda row: 'school.csv' in eval(row['tables']),axis=1)]