我正在尝试使用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")
再次......这很好用,但我想知道是否有更好的方法来做到这一点。
答案 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)