如何为数据框列中的每一行实例化不同的对象

时间:2019-05-06 08:31:44

标签: python pandas dataframe oop instantiation

我想用相同类的不同对象实例填充pandas数据框列。

我正在使用datasketch MinhashLSH通过为每个字符串创建压缩摘要来比较日志文件(字符串),以降低比较不同字符串时的复杂性。这要求为每个字符串创建一个新的MinHashLSH对象。因此,我为此尝试用不同的实例化对象填充数据框列。
我尝试添加一个指向对象实例化的列,但这会用相同的对象实例化填充该列,但是我需要使用不同的实例化对象可以根据每一行中的字符串进行操作以进行分析。
我知道我可以循环执行此操作,但是我想尽可能地提高效率。我还希望能够在添加新数据时轻松地向数据框添加新行。

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>
...

以下for循环有效,但这是最有效的方法吗? based on

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>
...

0 个答案:

没有答案