Как создать разные объекты для каждой строки в столбце данных - PullRequest
0 голосов
/ 06 мая 2019

Я хотел бы заполнить столбец данных pandas различными экземплярами объектов одного и того же класса.

Я использую datasketch MinhashLSH для сравнения файлов журналов (строк) путем создания сжатой сводки для каждой строки для упрощения сравнения различных строк. Это требует создания нового объекта MinHashLSH для каждой строки. Поэтому для этой цели я пытаюсь заполнить столбец dataframe различными объектами, для которых был создан экземпляр.
Я попытался добавить столбец, указывающий на экземпляр объекта, но этот столбец заполняется одним и тем же объектом, но мне нужны разные, которые могут манипулировать на основе строки в каждой строке для анализа.
Я знаю, что могу сделать это в цикле, но я хотел бы сделать это максимально эффективным. Мне также хотелось бы иметь возможность легко добавлять новые строки в фрейм данных при добавлении новых данных.

pdf = pandas.read_pickle("data/string_study.pkl")
pdf['MinHashObject'] = MinHash(num_perm=128)

Я думал, что это даст разные объекты в каждом ряду, но просто указывает на один и тот же:

print(pdf['MinHashObject'])
0        <datasketch.minhash.MinHash object at 0x7f9ec5320810>
1        <datasketch.minhash.MinHash object at 0x7f9ec5320810>
2        <datasketch.minhash.MinHash object at 0x7f9ec5320810>
3        <datasketch.minhash.MinHash object at 0x7f9ec5320810>
4        <datasketch.minhash.MinHash object at 0x7f9ec5320810>
...

Следующее для цикла работает, но это самый эффективный способ? на основе

ls = []
for i in range(len(pdf)):
    ls.append(MinHash(num_perm=128))
pdf['MinHashObject'] = ls

print(pdf['MinHashObject'])
0        <datasketch.minhash.MinHash object at 0x7f9ec5320c10>
1        <datasketch.minhash.MinHash object at 0x7f9ec60c2550>
2        <datasketch.minhash.MinHash object at 0x7f9ec60c2650>
3        <datasketch.minhash.MinHash object at 0x7f9ec60c2290>
4        <datasketch.minhash.MinHash object at 0x7f9ec5320cd0>
...
...