为什么where子句在熊猫中不起作用?

时间:2020-06-08 22:14:28

标签: python pandas

鉴于此,我有2个数据集,如下所示:

import pandas as pd
import numpy as np

dict1 = {
    "A" : range(1,6),
    "B": np.random.randint(1,10,5)
}

dt1 = pd.DataFrame(dict1)

dict2 = {
    "A" : range(1,6),
    "K" : np.random.randint(3,8,5),
    "Size of Sessile in Words": ["Small","Small","Medium","Large","Medium",]
}

dt2 = pd.DataFrame(dict2)

我正在尝试join这两个数据帧,但也使用Where子句:

size = "Small"
dt = dt1.merge(dt2, on='A').query('"Size of Sessile in Words" == {size}'.format(size) )

但是,它抱怨:

KeyError: 'size'

出什么问题了?

2 个答案:

答案 0 :(得分:3)

您需要对带有空格的列使用反引号,并使用@size来使用您定义的变量:

dt = dt1.merge(dt2, on='A').query('`Size of Sessile in Words`==@size')

   A  B_x  B_y Size of Sessile in Words
0  1    3    5                    Small
1  2    2    5                    Small

答案 1 :(得分:1)

在格式字符串中使用{size}意味着替换字典参数的size键的值。但是您的参数是字符串,而不是字典,它没有size键。使用%s设置字符串格式。

您还需要在其周围加上引号,以将其用作查询中的字符串。

dt = dt1.merge(dt2, on='A').query('"Size of Sessile in Words" == "%s"'.format(size) )

如果您使用的是Python 3.6或更高版本,则可以使用f字符串直接替换为字符串。

dt = dt1.merge(dt2, on='A').query(f'"Size of Sessile in Words" == "{size}"')