我需要组织大量数据。我认为一个好的解决方案可能是使用熊猫DF然后腌制DF来保存它。 只有问题,我仍然不明白熊猫是如何工作的,我不知道在我的数据方面应该考虑什么方法。
数据:((int, int), float, float)
形式的列表,但整数的第一个元组可以有不同的大小。
示例1:
[((78, 104), 1.55, 0.25),
((78, 104), 1.56, 0.25),
((78, 104), 1.57, 0.25),
((78, 104), 1.58, 0.25),
((75, 100), 5.02, 0.25),
((75, 100), 5.03, 0.25),
((75, 100), 5.04, 0.25),
((75, 100), 5.05, 0.25),
((78, 104), 1.25, 0.333),
((78, 104), 1.26, 0.333)]
示例2:
[((20, 78, 104), 1.55, 0.25),
((20, 78, 104), 1.56, 0.25),
((21, 78, 104), 1.57, 0.25),
((21, 78, 104), 1.58, 0.25),
((18, 75, 100), 5.02, 0.25),
((18, 75, 100), 5.03, 0.25),
((18, 75, 100), 5.04, 0.25),
((18, 75, 100), 5.05, 0.25),
((20, 78, 104), 1.25, 0.333),
((20, 78, 104), 1.26, 0.333)]
这些只是摘录。目前我在.txt文件中写入数据,然后在读取文件时用字符串方法将其解析回来。 正如您所看到的,元组可以是很多值(数百或数千)并且具有2或更大的len。
表示此数据的另一种方法是表单字典:Dict[tuple] = ([list of column 1], [list of column 2])
:
data_dict = dict()
for elt in data_list:
if elt[0] not in data_dict.keys():
data_dict[elt[0]] = ([elt[1]], [elt[2]])
else:
data_dict[elt[0]][0].append(elt[1])
data_dict[elt[0]][1].append(elt[2])
示例1:
data_list = [((78, 104), 1.55, 0.25), ((78, 104), 1.56, 0.25), ((78, 104), 1.57, 0.25), ((78, 104), 1.58, 0.25),
((75, 100), 5.02, 0.25), ((75, 100), 5.03, 0.25), ((75, 100), 5.04, 0.25), ((75, 100), 5.05, 0.25), ((78, 104), 1.25, 0.333),
((78, 104), 1.26, 0.333)]
Output:
{(78, 104): ([1.55, 1.56, 1.57, 1.58, 1.25, 1.26], [0.25, 0.25, 0.25, 0.25, 0.333, 0.333]),
(75, 100): ([5.02, 5.03, 5.04, 5.05], [0.25, 0.25, 0.25, 0.25])}
示例2:
data_list = [((20, 78, 104), 1.55, 0.25), ((20, 78, 104), 1.56, 0.25), ((21, 78, 104), 1.57, 0.25), ((21, 78, 104), 1.58, 0.25),
((18, 75, 100), 5.02, 0.25), ((18, 75, 100), 5.03, 0.25), ((18, 75, 100), 5.04, 0.25), ((18, 75, 100), 5.05, 0.25), ((20, 78, 104), 1.25, 0.333),
((20, 78, 104), 1.26, 0.333)]
Output:
{(20, 78, 104): ([1.55, 1.56, 1.25, 1.26], [0.25, 0.25, 0.333, 0.333]),
(21, 78, 104): ([1.57, 1.58], [0.25, 0.25]),
(18, 75, 100): ([5.02, 5.03, 5.04, 5.05], [0.25, 0.25, 0.25, 0.25])}
将这些数据存储在文件中并以有效的方式访问它的可能方式(以及最佳方法是什么)?
组合是:((78, 104), 1.57, 0.25)
例如,对于访问部分,我将需要在文件1中查找使用元组(78,104)的组合,然后在文件2中查找使用元组(20,78)的组合。最终目标是找到每个匹配的组合,即文件1中的(78,104)之后的2个值必须与文件2中的(20,78)之后的2个值相同。因此我需要快速访问有趣的组合每个文件。
感谢您提供有关如何表示此数据并存储数据的任何建议,代码和帮助。
如果你要求,我可以把代码存储/读取.txt文件,但我想我们都同意这不是解决这个问题的最佳方法。
答案 0 :(得分:1)
import pandas as pd
ex_first = [((78, 104), 1.55, 0.25),
((78, 104), 1.56, 0.25),
((78, 104), 1.57, 0.25),
((78, 104), 1.58, 0.25),
((75, 100), 5.02, 0.25),
((75, 100), 5.03, 0.25),
((75, 100), 5.04, 0.25),
((75, 100), 5.05, 0.25),
((78, 104), 1.25, 0.333),
((78, 104), 1.26, 0.333)]
data = pd.DataFrame(ex_first)
data.columns = ["tuple1", "name1", "name2"]
# saving
data.to_csv("DataFrame.csv")
如果你想检索元组的值是"(78,104)"你看起来很简单:
In [67]: results = data[data.tuple1==(78, 104)]
In [68]: results
Out[68]:
tuple1 name1 name2
0 (78, 104) 1.55 0.250
1 (78, 104) 1.56 0.250
2 (78, 104) 1.57 0.250
3 (78, 104) 1.58 0.250
8 (78, 104) 1.25 0.333
9 (78, 104) 1.26 0.333
如果csv文件很大 - > read how to use chunks