使用kwargs通过pandas查询数据
我正在尝试使用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)