Python 删除重复记录 - 重复数据删除
Python deduplicate records - dedupe
我想使用 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} ...}
看来 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}}
您可以尝试这样的操作:
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 转置索引和列。
不需要 python 字典,您只需要一个允许按列名索引的对象。即 row['col_name']
所以,假设 data
是一个 pandas 数据框应该能够做类似的事情:
data_d = {}
for row_id, row in data.iterrows():
data_d[row_id] = row
也就是说,python 指令的内存开销不会成为重复数据删除中存在内存瓶颈的地方。
我想使用 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} ...}
看来 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}}
您可以尝试这样的操作:
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 转置索引和列。
不需要 python 字典,您只需要一个允许按列名索引的对象。即 row['col_name']
所以,假设 data
是一个 pandas 数据框应该能够做类似的事情:
data_d = {}
for row_id, row in data.iterrows():
data_d[row_id] = row
也就是说,python 指令的内存开销不会成为重复数据删除中存在内存瓶颈的地方。