熊猫将列添加到未引用的数据框

时间:2019-07-05 06:17:04

标签: python pandas

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

'trial_unq'是两列数据帧,'trial_unq2'是相同的副本,for循环遍历'unique_in'中的所有字符串。如果trial_unq文本中的“ unique_in”少于250次,则将一个布尔列插入到trial_unq的末尾。如果untriue_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数据帧都添加了所有三列。

1 个答案:

答案 0 :(得分:2)

在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()