python - 如何使用 PANDAS 数据框中的值作为正则表达式中的过滤器参数?
问题描述
我想将 Pandas df 中的值用作 SPARQL 查询中的过滤器参数。
通过从 excel 文件中读取数据,我正在创建 pandas 数据框:
xls = pd.ExcelFile ('excel/dataset_nuovo.xlsx')
df1 = pd.read_excel(xls, 'Sheet1')
print(df1)
这里生成的数据框:
oggetto descrizione lenght label tipologia
0 @iccd4580759@ Figure: putto. Oggetti: ghirlanda di fiori 6 Bad OpereArteVisiva
1 @iccd3636719@ Decorazione plastica. 2 Bad OpereArteVisiva
2 @iccd3641475@ Scultura.. Figure: angelo 3 Bad OpereArteVisiva
3 @iccd8282504@ Custodia di reliquiario in legno intagliato e ... 8 Good OpereArteVisiva
4 @iccd3019633@ Portale. 1 Bad OpereArteVisiva
... ... ... ... ... ...
59995 @iccd2274873@ Ciotola media a larga tesa. Decorazione in cob... 35 Good OpereArteVisiva
59996 @iccd11189887@ Il medaglione bronzeo, sormontato da un'aquila... 85 Good OpereArteVisiva
59997 @iccd4545324@ Tessuto di fondo rosaceo. Disegno a fiori e fo... 49 Good OpereArteVisiva
59998 @iccd2934870@ Sculture a tutto tondo in legno dipinto di bia... 28 Good OpereArteVisiva
59999 @iccd2685205@ Calice con piede a base circolare e nodo ovoid... 14 Bad OpereArteVisiva
然后我需要使用oggetto
列中的值作为过滤器来检索(每条记录)subject
来自 SPARQL 端点的相对值。
通过使用此 SPARQL 查询:
SELECT ?object ?description (group_concat(?subject;separator="|") as ?subjects)
WHERE { ?object a crm:E22_Man-Made_Object;
crm:P3_has_note ?description;
crm:P129_is_about ?concept;
crm:P2_has_type ?type.
?concept a crm:E28_Conceptual_Object;
rdfs:label ?subject.
filter( regex(str(?object), "@iccd4580759@" ))
}
我能够过滤一条记录。
object.type object.value ... subjects.type subjects.value
0 uri http://dati.culturaitalia.it/resource/oai-oaic... ... literal Putto con ghirlanda di fiori|Putto con ghirlan..
由于数据集是 60k 条记录,我将通过循环遍历数据框并使用该值作为过滤器来使该过程自动化,从而获得具有相对subject
col 的新 df。
oggetto descrizione subject lenght label tipologia
0 @iccd4580759@ Figure: putto. Oggetti: ghirlanda di fiori Putto con ghirlanda di fiori|Putto con ghirlan.. 6 Bad OpereArteVisiva
这是我写的整个脚本:
import xlrd
import pandas as pd
from pandas import json_normalize
from SPARQLWrapper import SPARQLWrapper, JSON
xls = pd.ExcelFile ('excel/dataset_nuovo.xlsx')
df1 = pd.read_excel(xls, 'Sheet1')
print(df1)
def query_ci(sparql_query, sparql_service_url):
sparql = SPARQLWrapper(sparql_service_url)
sparql.setQuery(sparql_query)
sparql.setReturnFormat(JSON)
# ask for the result
result = sparql.query().convert()
return json_normalize(result["results"]["bindings"])
sparql_query = """ SELECT ?object ?description (group_concat(?subject;separator="|") as ?subjects)
WHERE { ?object a crm:E22_Man-Made_Object;
crm:P3_has_note ?description;
crm:P129_is_about ?concept;
crm:P2_has_type ?type.
?concept a crm:E28_Conceptual_Object;
rdfs:label ?subject.
filter( regex(str(?object), "@iccd4580759@" ))
}
"""
sparql_service_url = "http://dati.culturaitalia.it/sparql"
result_table = query_ci(sparql_query, sparql_service_url)
print (result_table)
result_table.to_excel("output.xlsx")
有可能这样做吗?
解决方案
推荐阅读
- c++ - 什么时候需要用括号括起来的 requires 子句表达式?(偶然的双关语)
- c++ - 覆盖 C++ 纯虚函数
- c++ - 为什么未指定的 lambda 返回类型并不总是有效?
- ms-word - 插入 Ooxml - Word Online 中不支持的元素
- sql - TSQL / SQL - 错误:选择列表中的列无效,因为它不包含在聚合函数或 GROUP BY 子句中
- ios - 更新适用于 iOS 的 Google-Mobile-Ads-SDK 时出现问题
- json - 在一个巨大的 JSON 文件中,用 \\ 替换所有 \ 的最有效方法是什么?
- c# - 列出剃须刀页面中的登录用户
- bash - bash脚本:在子目录中查找最近的文件
- blazor - 如何正确部署 Blazor WebAssembly(托管)应用程序?