【发布时间】:2019-11-19 20:18:00
【问题描述】:
我已经发了一个帖子here,但由于我现在没有得到答案,我想也许也可以在这里尝试一下,因为我发现它很相关。
我有以下代码:
import pandas as pd
import numpy as np
import itertools
from pprint import pprint
# Importing the data
df=pd.read_csv('./GPr.csv', sep=',',header=None)
data=df.values
res = np.array([[i for i in row if i == i] for row in data.tolist()], dtype=object)
# This function will make the subsets of a list
def subsets(m,n):
z = []
for i in m:
z.append(list(itertools.combinations(i, n)))
return(z)
# Make the subsets of size 2
l=subsets(res,2)
l=[val for sublist in l for val in sublist]
Pairs=list(dict.fromkeys(l))
# Modify the pairs:
mod=[':'.join(x) for x in Pairs]
# Define new lists
t0=res.tolist()
t0=map(tuple,t0)
t1=Pairs
t2=mod
# Make substitions
result = []
for v1, v2 in zip(t1, t2):
out = []
for i in t0:
common = set(v1).intersection(i)
if set(v1) == common:
out.append(tuple(list(set(i) - common) + [v2]))
else:
out.append(tuple(i))
result.append(out)
pprint(result, width=200)
# Delete duplicates
d = {tuple(x): x for x in result}
remain= list(d.values())
它的作用如下:首先,我们在here中导入我们要使用的csv文件。您可以看到它是一个元素列表,对于每个元素,我们找到大小为 2 的子集。然后我们对子集进行修改并将其命名为mod。它的作用是将('a','b') 转换为'a:b'。然后,对于每一对,我们遍历原始数据,并在哪里找到我们替换它们的对。最后,我们删除所有重复项。
该代码适用于少量数据。然而问题是我拥有的文件有 30082 对,其中每个应该扫描 ~49000 列表的列表并替换对。我在 Jupyter 中运行它,一段时间后内核死了。我想知道如何优化这一点?
【问题讨论】:
-
第一行数据的预期结果是什么:“鸡肉桂姜洋葱酱油”?
-
是的。就像
[('chicken','cinnamon', 'ginger', 'onion', 'soy_sauce'),...]一样,...表示其他类似格式的数据。 -
我的意思是这行数据的输出应该是什么?
标签: python pandas performance numpy itertools