Pandas select 基于列值的 DataFrame 行?
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]
您需要进入单元格的数据并获取正确的密钥:
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': ...
我认为您的问题是由 json 结构引起的。您实际上是在 df
中加载了整个字段列表 component
.
的一行
您应该改为将记录列表传递给数据框。类似于:
json_data = json.loads(data)
df = pd.DataFrame(json_data["components"])
filtered_data = df[df["ossId"] == 2550]
我已将以下 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]
您需要进入单元格的数据并获取正确的密钥:
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': ...
我认为您的问题是由 json 结构引起的。您实际上是在 df
中加载了整个字段列表 component
.
您应该改为将记录列表传递给数据框。类似于:
json_data = json.loads(data)
df = pd.DataFrame(json_data["components"])
filtered_data = df[df["ossId"] == 2550]