Моя цель - сохранить отфильтрованный список кортежей в файл pickle и иметь возможность снова открыть его и обработать его элементы.
Данные, с которыми я работаю, представляют собой список кортежей. Точнее:
lines = [((list of strings, tuple, tuple), 'string1', 'string2'), \
(((list of strings, tuple, tuple), 'string2', 'string3'), \
(((list of strings, tuple, tuple), 'string1', 'string2'), \
(((list of strings, tuple, tuple), 'string3', 'string4')]
Важной частью здесь являются последние два элемента каждого кортежа.
Я хочу отфильтровать список таким образом, чтобы повторялись только кортежи с последними двумя строками. остается больше единицы.
[(some_tuple, 'string1' , 'string2' ), (some_tuple, 'string1' , 'строка2' ), (some_tuple, 'строка2' , 'строка3' )] -> [(some_tuple, 'строка1' , 'строка2' ), (some_tuple, 'строка1' , 'строка2' )]
(Пара строка1, строка2 появилась в двух кортежах , и пара строка2, строка3 только в одном)
import pickle
import pandas as pd
lines = [((['e0', 'e1', 'e2'], (0,1), (1,2)), 'e1', 'e2'), \
((['e0', 'e1', 'e2'], (0,1), (1,2)), 'e0', 'e2'), \
((['e0', 'e1', 'e2'], (0,1), (1,2)), 'e1', 'e2'), \
((['e0', 'e1', 'e2'], (0,1), (1,2)), 'e2', 'e3')]
df = pd.DataFrame(lines, columns=['r', 'e1', 'e2'])
df = df.groupby(['e1', 'e2']).filter(lambda x: len(x) > 1)
D_f = list(df.to_records(index = False))
print(type(D_f))
print(D_f)
with open('data/output.pkl', 'wb') as output:
pickle.dump(D_f, output)
Теперь возникает проблема. Когда я снова пытаюсь загрузить этот файл - ошибок нет, длина загруженного файла равна 2, а тип - список. Однако я не могу распечатать этот список или go через его 2 элемента с al oop. Все ломается на первом элементе без каких-либо ошибок.
with open('data/output.pkl', 'rb') as f:
D = pickle.load(f)
print(len(D))
print(type(D))
for i,x in enumerate(D):
print(i)
print(x)
Результат, который я ожидаю получить после чтения файла .pkl, представляет собой список кортежей, как это было раньше, а именно: [((['e0', 'e1', 'e2'], (0,1), (1,2)), 'e1', 'e2'), ((['e0', 'e1', 'e2'], (0,1), (1,2)), 'e1', 'e2')]
PS Я также пытался просто сохраните и прочтите файл без фильтрации, это, кажется, работает нормально (я ожидаю, что проблема в том, что я нарушаю sth в формате, когда помещаю его в pandas фрейм данных, а затем пытаюсь воссоздать его).
И я также попытался прочитать файл сразу после того, как он был сохранен в том же скрипте - это тоже работает, что я нахожу крайне странным.
Заранее большое спасибо за все предложения!