使用带有kwargs的pandas查询数据

时间:2014-06-12 21:16:54

标签: python json pandas data-analysis kwargs

我正在尝试使用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" 
}]

我的目标是查询city == NY和status == 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 :(得分:0)

** Kwargs与Pandas没什么关系,它是一个基本的Python事物,你只需要创建一个接受Kwargs并将变量Kwargs替换为pandas Df查询语句(函数内部)的函数。没有时间为您编写代码,但阅读Python文档应该可以帮到您。 Pandas只是Python系统的一个重要组成部分,当你开始组合多个部分时,你需要熟悉这些部分。

答案 1 :(得分:0)

我认为你的做法没有任何问题。如果你想使用df.query你可以做这样的事情,虽然我认为它的可读性较差。

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