我正在尝试学习推荐系统。我已将关联规则导入到工作表中,但前因和后继值被格式化为字符串,我需要将它们转换为 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
你当然可以将它们分开,例如使用
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))))