我的以下查询有效,并返回一个Dataframe子集,其中只包含包含James记录的行。
pat_db.query('pat_medical_records == "James"')
但是,我需要检索数千名患者的信息。所以我试图分配一个变量名称" a"并将其传递给上述行。我在这里得到错误。
a = James
pat_db.query('pat_medical_records == a')
UndefinedVariableError: name 'a' is not defined
然后我尝试分配" a"手动:
a = "James"
pat_db.query('pat_medical_records == a')
UndefinedVariableError: name 'a' is not defined
我错过了什么?
答案 0 :(得分:2)
您可以使用str.format
指定插入的占位符字符串:
a = ... # example; a = "James"
pat_db.query('pat_medical_records == "{}"'.format(a))
答案 1 :(得分:1)
试试这个:
my_list = ['James','Joe',...]
pat_db.query('pat_medical_records in @my_list')
您可能需要阅读this great Pandas documentation with lots of useful examples
演示:
In [81]: df = pd.DataFrame({'name': np.random.choice(['aaa','bbb','ccc','ddd','eee'], 20),
'age':np.random.randint(5, 99, 20)})
In [82]: df
Out[82]:
age name
0 50 aaa
1 60 ccc
2 93 ddd
3 40 aaa
4 66 ddd
5 98 eee
6 95 eee
7 42 eee
8 53 bbb
9 74 ddd
10 93 ccc
11 76 ccc
12 74 aaa
13 74 eee
14 83 ddd
15 42 ddd
16 51 ccc
17 84 bbb
18 37 eee
19 24 aaa
In [83]: flt = ['aaa', 'eee']
In [84]: df.query("name in @flt")
Out[84]:
age name
0 50 aaa
3 40 aaa
5 98 eee
6 95 eee
7 42 eee
12 74 aaa
13 74 eee
18 37 eee
19 24 aaa