这个人已经让我震惊了好几个小时。也许我缺少一些不可思议的“陷阱”,但它必须非常违反直觉。

“ trial_unq”是两列数据帧,“ trial_unq2”是相同的副本,for循环遍历“ unique_in”中的所有字符串。如果trial_unq文本中的“ unique_in”少于250次,则在trial_unq的末尾插入一个布尔列。如果unqiue_in在trial_unq的文本中超过10000次,则将布尔列n插入到trial_unq2的末尾。

trial_unq2 = trial_unq

for i in range(len(unique_in)):#for each individual word
    unq_count = trial_unq.brief_title.str.contains(unique_in[i]).sum()#count trial occurances
    print(unique_in[i], ' ', unq_count)
    if unq_count < 280 and unq_count > 0:
        colname = unique_in[i]
        colpos = len(trial_unq.columns)
        boolcol = trial_unq.brief_title.str.contains(unique_in[i])
        trial_unq.insert(colpos, colname, boolcol)
    if unq_count > 10000:
        colname2 = unique_in[i]
        colpos2 = len(trial_unq2.columns)
        boolcol2 = trial_unq2.brief_title.str.contains(unique_in[i])
        trial_unq2.insert(colpos2, colname2, boolcol2)

print(trial_unq.columns)
print(trial_unq2.columns)


输出量

['depressive', 'disorder', 'depressive disorder', 'therapy']
depressive   257
disorder   2190
depressive disorder   167
therapy   12236
Index(['NCT', 'brief_title', 'depressive', 'depressive disorder', 'therapy'], dtype='object')
Index(['NCT', 'brief_title', 'depressive', 'depressive disorder', 'therapy'], dtype='object')


从输出中可以清楚地看到,小计数trial_unq数据帧和大计数trial_unq2数据帧都添加了所有三列。

最佳答案

在Python中,多个名称可以引用相同的对象,例如

l1 = [1, 2, 3]
l2 = l1  # now both, l1 and l2 refer to the same object!
l2[1] = 100


现在l1l2都看起来像这样:

[1, 100, 3]


您的两个数据框也会发生同样的情况。

在这种情况下,您只需使用.copy()

l3 = l1.copy()
l3[1] = 0

l1
[1, 100, 3]

l3
[1, 0, 3]


因此,要解决您的问题,您需要做的是:

trial_unq2 = trial_unq.copy()

关于python - Pandas 将列添加到未引用的数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56897473/

10-12 16:53
查看更多