2017-07-26 9 views
1

次のクエリが機能し、Jamesのレコードを含む行のみを含むDataframeサブセットが返されます。Pythonサブセット列値を使用したデータフレームの行

pat_db.query('pat_medical_records == "James"') 

しかし、何千もの患者の情報を取得する必要があります。だから、私は変数名 "a"を割り当てて、上記の行に渡そうとしています。ここではエラーが発生しています。

a = James 
pat_db.query('pat_medical_records == a') 
UndefinedVariableError: name 'a' is not defined 

私は、 "" 手動で割り当ててみました:

a = "James" 
pat_db.query('pat_medical_records == a') 
UndefinedVariableError: name 'a' is not defined 

は、私が何をしないのですか?

あなたが挿入するためのプレースホルダ文字列を指定する str.formatを使用することができます
+0

'pat _db.query( 'pat_medical_records == @a') 'はすべきことです – MaxU

答えて

3

a = ... # example; a = "James"  
pat_db.query('pat_medical_records == "{}"'.format(a)) 
+0

こんにちは私はあなたの提案したアプローチを試みました。しかし、私はまだエラーが発生しています。 = "James Holt"を使用 SyntaxError:無効な構文 –

+0

@continuous_learner私はそれを理解しました。二重引用符がありませんでした。私の編集をチェックしますか? –

+0

完璧に作業しました!ありがとうございました。 –

2

これを試してみてください:

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 
+0

ありがとうございました。私はリンクにも感謝します。 –

+0

@continuous_learner、あなたも大歓迎です:) – MaxU

関連する問題