鉴于此,我有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'
出什么问题了?
答案 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}"')