使用列值的Python子集数据帧行

2024-04-26 07:01:08 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的查询工作并返回一个数据帧子集,其中只包含包含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

我错过了什么?你知道吗


Tags: 数据name患者dbis记录notquery
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

可以使用str.format指定要插入的占位符字符串:

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

相关问题 更多 >