python - 循环更改甚至没有循环的行数据?

标签 python loops pandas

我有一个词汇,它是单词列表。我有一个包含两列的数据框 posts:wordswordsdictcoded。第一个包含诸如 ['this', 'is'] 之类的单词列表。词汇表包含 words 列中出现的所有单词。 wordsdictcoded 列应包含编码的单词。编码的工作原理如下:每个单词都由词汇表长度中的 0 和 1 数组表示。 words 列由词汇表进行编码:如果第 n 个单词是词汇表中的第 i 个单词,则编码的第 i 个元素将为 1。 铁:

vocabulary = ['this', 'is' 'a', 'test']
words[i] = ['a', 'test']
wordsdictcoded[i] = [0, 0, 1, 1]

这就是我想要实现的目标。我的代码是:

listofzeros = [0] * len(vocabulary)
posts['wordsdictcoded'] = [listofzeros] * len(posts)
for i in range(0, len(posts)):
    for word in posts['words'][i]:
        posts['wordsdictcoded'][i][vocabulary.index(word)] = 1

但是,我最终得到的每行帖子都是全 1 ['wordsdictcoded']。我不明白。如果我只是运行 range(0,1) 循环,即使 print(posts['wordsdictcoded'][5] 获取值,所有行都会获取该值。为什么?

最佳答案

这是一个常见的 Python 陷阱。问题是 [listofzeros] * len(posts) 复制同一个列表 len 次,但它不会创建副本。你可以测试一下

id(posts['wordsdictcoded'][0]) == id(posts['wordsdictcoded'][1])

请参阅下面的评论(用户 DYZ)了解解决方案

关于python - 循环更改甚至没有循环的行数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146361/

相关文章:

python - 计算 if (COUNTIF) 并添加到 Python 中的数据框

python - 使用 pandas 读取 excel 时精度损失

python - 如何将 pandas 数据框转换为热图兼容数据框?

python - CX_Oracle CTE 执行

python - 根据 DateTimeIndex 更新列

java - 打破Java中的for循环

file - 如何在 Clojure 中从文件中读取多个变量?

python - 按体素打乱 4 维时间序列

python - 如何在类中使用 scipy 的最小化?

java - 在java数组中查找重复项