1

我想使用https://github.com/datamade/dedupe对 python 中的一些记录进行重复数据删除。看看他们的例子

data_d = {}
for row in data:
    clean_row = [(k, preProcess(v)) for (k, v) in row.items()]
    row_id = int(row['id'])
    data_d[row_id] = dict(clean_row)

与例如由 pandas 从 pd.Datafrmae 甚至普通的 pd.Dataframe 创建的字典相比,该字典消耗了相当多的内存。

如果需要这种格式,如何有效地将 pd.Dataframe 转换为这样的字典?

编辑

pandas 生成的示例

{'column1': {0: 1389225600000000000,
  1: 1388707200000000000,
  2: 1388707200000000000,
  3: 1389657600000000000,....

示例重复数据删除的期望

{'1': {column1: 1389225600000000000, column2: "ddd"},
 '2': {column1: 1111, column2: "ddd} ...}
4

3 回答 3

3

似乎df.to_dict(orient='index')会产生您正在寻找的表示:

import pandas

data = [[1, 2, 3], [4, 5, 6]]
columns = ['a', 'b', 'c']

df = pandas.DataFrame(data, columns=columns)

df.to_dict(orient='index')

结果是

{0: {'a': 1, 'b': 2, 'c': 3}, 1: {'a': 4, 'b': 5, 'c': 6}}
于 2016-09-18T07:35:38.800 回答
0

你可以尝试这样的事情:

df = pd.DataFrame({'A': [1,2,3,4,5], 'B': [6,7,8,9,10]})
A   B
0  1   6
1  2   7
2  3   8
3  4   9
4  5  10

print(df.T.to_dict())
{0: {'A': 1, 'B': 6}, 1: {'A': 2, 'B': 7}, 2: {'A': 3, 'B': 8}, 3: {'A': 4, 'B': 9}, 4: {'A': 5, 'B': 10}}

这与@chthonicdaemon 答案中的输出相同,因此他的答案可能更好。我正在使用pandas.DataFrame.T来转置索引和列。

于 2016-09-18T07:42:09.487 回答
0

不需要 python 字典,您只需要一个允许按列名索引的对象。IErow['col_name']

因此,假设data一个熊猫数据框应该能够执行以下操作:

data_d = {}
for row_id, row in data.iterrows():
    data_d[row_id] = row

也就是说,python dicts 的内存开销不会是重复数据删除中存在内存瓶颈的地方。

于 2016-09-18T13:30:07.820 回答