在列中查找包含正确设置值的行

2024-10-02 20:36:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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(eval(hp_df['tables'].to_numpy())) == {school.csv'}]

但这显然行不通。你知道吗

ValueError: source code string cannot contain null bytes

关于如何正确操作有什么帮助吗?你知道吗

此处hp\ U行的预期值为

"{'school.csv'}",1024,16,4,8

请注意,我要比较的是集合对象,而不是字符串。你知道吗

谢谢

编辑: 我的临时解决方案(但正在寻找更紧凑和优化的解决方案):

for i in range(df.shape[0]):
    row = df.iloc[i]
    s = set(eval(row['tables']))
    if s == {"school.csv"}:
        selected_row = row

Tags: csv字符串dftableseval解决方案minrow
2条回答

如果要使用包含require元素的set对行进行切片:

hp_df[hp_df.apply(lambda row: 'school.csv' in eval(row['tables']),axis=1)]

IIUC,您可以使用ast.literal_eval将列table从字符串转换为集合,并将其分配给s。接下来,使用locs进行切片

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

相关问题 更多 >