使用kwargs通过pandas查询数据

1 投票
2 回答
2182 浏览
提问于 2025-04-18 09:36

我正在尝试使用Python的pandas库来查询数据。这里有一个数据的示例json...

[
{
"name": "Bob", 
"city": "NY", 
"status": "Active"
}, 
{
"name": "Jake", 
"city": "SF", 
"status": "Active" 
}, 
{
"name": "Jill", 
"city": "NY", 
"status": "Lazy" 
},
{
"name": "Steve", 
"city": "NY", 
"status": "Lazy" 
}]

我的目标是查询城市为NY且状态为Lazy的数据。使用pandas的DataFrame可以这样做...

df = df[(df.status == "Lazy") & (df.city == "NY")]

这个方法运行得很好,但我希望能让它更抽象一些。

有没有办法使用**kwargs来过滤数据?到目前为止,我在使用pandas文档时遇到了一些困难。

到目前为止,我做了.....

 def main(**kwargs):

        readJson = pd.read_json(sys.argv[1])

        for key,value in kwargs.iteritems():
            print(key,value)
            readJson = readJson[readJson[key] == value]

        print readJson

if __name__ == '__main__':
    main(status="Lazy",city="NY")

再说一次...这个方法也很好用,但我在想有没有更好的方法来实现。

2 个回答

0

**Kwargs其实和Pandas没有太大关系,它是Python的一个基本概念。你只需要写一个可以接收Kwargs的函数,然后把这个Kwargs变量放到Pandas的DataFrame查询语句里(在函数内部)。我没有时间为你写代码,但你可以看看Python的文档,这样就能入门了。Pandas只是Python系统中的一个很棒的部分,当你开始把多个部分结合起来时,你就需要熟悉这些不同的部分了。

0

我觉得你的方法没有什么问题。如果你想用 df.query,可以这样做,不过我觉得这样写起来不太容易理解。

expr = " and ".join(k + "=='" + v + "'" for (k,v) in kwargs.items())
readJson = readJson.query(expr)

撰写回答