relations = []
...
rel_dict = {'start': start, 'end': end, 'type': relationship}
if rel_dict not in relations:
relations.append(rel_dict)
rel_df = pd.DataFrame(relations)
,这是我的代码创建一个dataframe以下减缓很多:
if rel_dict not in relations
如果我将"关系"定义为一个集合,DataFrame可以使用一个集合来创建一个数据框架吗?如果我还想保持集合的顺序,我可以这样做吗?
或者我应该把"关系"定义为字典:
from collections import OrderedDict
relations = OrderedDict()
...
if rel_dict not in relations:
relations[rel_dict] = rel_dict
你的建议是什么?两个想法:
首先,使用frozendict
,它类似于python字典,但可哈希(并且不可变)。Pandas的数据框架构造函数不介意获取一组冻结的字典,所以这可以工作:
relations = set()
...
rel_dict = frozendict(start=start, end=end, type=relationship)
relations.add(rel_dict)
rel_df = pd.DataFrame(relations)
这将失去排序,所以为了保持它,我们可以将set
替换为dict
(您正在使用python 3.6或更高版本,对吗?)
relations = dict()
...
rel_dict = frozendict(start=start, end=end, type=relationship)
relations[rel_dict] = None
rel_df = pd.DataFrame(relations.keys())
第二,把整个东西喂给熊猫,然后在
df = pd.DataFrame(rel_dicts).drop_duplicates(keep='first')
不知道哪一个更快,你必须试一试。