繁体   English   中英

基于列值的 DataFrame 中的 Pandas select 行?

[英]Pandas select rows from a DataFrame based on column values?

我已将以下json字符串加载到dataframe 现在我想根据ossId过滤记录。

我的条件是给出错误信息。 按ossId过滤的正确方法是什么?

import pandas as pd

data = """
{
  "components": [
    {
      "ossId": 3946,
      "project": "OALX",
      "licenses": [
        {
          "name": "BSD 3",
          "status": "APPROVED"
        }
      ]
    },
    {
      "ossId": 3946,
      "project": "OALX",
      "version": "OALX.client.ALL",
      "licenses": [
        {
          "name": "GNU Lesser General Public License v2.1 or later",
          "status": "APPROVED"
        }
      ]
    },
    {
      "ossId": 2550,
      "project": "OALX",
      "version": "OALX.webservice.ALL" ,
      "licenses": [
        {
          "name": "MIT License",
          "status": "APPROVED"
        }
      ]
    }
  ]
}
"""

df = pd.read_json(data)
print(df)

df1 = df[df["components"]["ossId"] == 2550]

我认为您的问题是由于 json 结构引起的。 您实际上是将一行加载到df中,该行是字段component的整个列表。

您应该将记录列表传递给 dataframe。 就像是:

json_data = json.loads(data)
df = pd.DataFrame(json_data["components"])

filtered_data = df[df["ossId"] == 2550]

您需要将 go 放入单元格的数据中并获取正确的密钥:

df[df['components'].apply(lambda x: x.get('ossId')==2550)]

使用str

df[df.components.str['ossId']==2550]
Out[89]: 
                                          components
2  {'ossId': 2550, 'project': 'OALX', 'version': ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM