如何将“frozenset({})”字符串转换为frozenset数据类型?

问题描述 投票:0回答:1

我正在尝试学习推荐系统。我已将关联规则导入到工作表中,但前因和后继值被格式化为字符串,我需要将它们转换为 python 中的数据类型 freezeset。 如果 a 有一个像

"frozenset({3048, 3046})"
这样的字符串,我需要将其转换为
(3048,3046)
我怎样才能做到这一点?

这是示例代码。

import pandas as pd

frozen_df =  [{"antecedents" : "frozenset({3048, 3046})","consequents" : "frozenset({10})"},
              {"antecedents" : "frozenset({3504, 3507})","consequents" : "frozenset({3048, 85})"}]

frozen_df = pd.DataFrame(frozen_df)
frozen_df.dtypes
python pandas recommendation-engine
1个回答
1
投票

你当然可以将它们分开,例如使用

def to_frozenset(x):
    return frozenset(map(int, x.split("{")[1].split("}")[0].split(",")))

frozen_df = frozen_df.applymap(to_frozenset)

但请注意,

frozen_df.dtypes
仍将是
object
,因为 Pandas 中没有“frozenset dtype”。相反,查看单个元素 (
frozen_df.iloc[0, 0]
) 将证明这些元素确实是冻结集。


编辑:由于这个问题似乎仍然存在,这里有一个正确的版本,支持替代字符串格式:

import re

def to_frozenset(x):
    return frozenset(map(int, re.findall("\d+", str(x))))
© www.soinside.com 2019 - 2024. All rights reserved.