从 Google Colab 的结果创建 CSV

发布于 2025-01-13 15:19:52 字数 1440 浏览 4 评论 0 原文

我正在使用维基数据查询服务来获取值,这是代码:

pip install sparqlwrapper

import sys
from SPARQLWrapper import SPARQLWrapper, JSON

endpoint_url = "https://query.wikidata.org/sparql"

query = """#List of organizations 

SELECT ?org ?orgLabel
WHERE
{
  ?org wdt:P31 wd:Q4830453. #instance of organizations
  ?org wdt:P17 wd:Q96. #Mexico country

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en"}
}"""


def get_results(endpoint_url, query):
    user_agent = "WDQS-example Python/%s.%s" % (sys.version_info[0], sys.version_info[1])
    # TODO adjust user agent; see https://w.wiki/CX6
    sparql = SPARQLWrapper(endpoint_url, agent=user_agent)
    sparql.setQuery(query)
    sparql.setReturnFormat(JSON)
    return sparql.query().convert()

results = get_results(endpoint_url, query)

for result in results["results"]["bindings"]:
    print(result)

此代码为我提供了我需要的数据,但我在尝试使用此行获取此信息时遇到问题:

results.to_csv('results.csv', index=False)

出现此错误:

'dict' object has no attribute 'to_csv'

我将 pandas 和 numpy 导入这样做,但我仍然遇到问题,所以我想知道如何将此结果放入某种格式中,以使用获得的数据创建我的 csv 文件。

这里有一些屏幕截图。

屏幕截图 1

I'm using Wikidata query service to obtain values and this is the code:

pip install sparqlwrapper

import sys
from SPARQLWrapper import SPARQLWrapper, JSON

endpoint_url = "https://query.wikidata.org/sparql"

query = """#List of organizations 

SELECT ?org ?orgLabel
WHERE
{
  ?org wdt:P31 wd:Q4830453. #instance of organizations
  ?org wdt:P17 wd:Q96. #Mexico country

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en"}
}"""


def get_results(endpoint_url, query):
    user_agent = "WDQS-example Python/%s.%s" % (sys.version_info[0], sys.version_info[1])
    # TODO adjust user agent; see https://w.wiki/CX6
    sparql = SPARQLWrapper(endpoint_url, agent=user_agent)
    sparql.setQuery(query)
    sparql.setReturnFormat(JSON)
    return sparql.query().convert()

results = get_results(endpoint_url, query)

for result in results["results"]["bindings"]:
    print(result)

This code give me the data that I need but I'm having problems trying to get this information with this line:

results.to_csv('results.csv', index=False)

with this error:

'dict' object has no attribute 'to_csv'

I import pandas and numpy to do it, but I'm still with problems so I would like to know how to put this results in a format to create my csv file with the data obtained.

Here you have some screenshots.

screenshot 1

screenshot 2

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

汹涌人海 2025-01-20 15:19:52

results 是一个 字典,即无法调用方法 to_csv 的 Python 数据结构。

为了安全地存储 python 字典中的 csv,您可以使用外部库(另请参阅文档< /a> 在 python.org 上)。

具体的解决方案取决于您确切想要导出的(元)数据。下面我假设您想要存储 orgorgLabelvalue

import csv
bindings = results['results']['bindings']
sparqlVars = ['org', 'orgLabel']
metaAttribute = 'value'
with open('results.csv', 'w', newline='') as csvfile :
    writer = csv.DictWriter(csvfile, fieldnames=sparqlVars)
    writer.writeheader()
    for b in bindings :
        writer.writerow({var:b[var][metaAttribute] for var in sparqlVars})

输出是:

org,orgLabel
http://www.wikidata.org/entity/Q47099,"Grupo Televisa, owner of TelevisaUnivision"
http://www.wikidata.org/entity/Q429380,Aeropuertos y Servicios Auxiliares
http://www.wikidata.org/entity/Q482267,América Móvil
...

results is a dictionary, that is a python data structure which you can't invoke a method to_csv on.

For safely storing a csv from a python dictionary you can use external libraries (see also the documentation on python.org).

The specific solution depends on which (meta)data you exactly want to export. In the following I assume that you want to store the value for org and orgLabel.

import csv
bindings = results['results']['bindings']
sparqlVars = ['org', 'orgLabel']
metaAttribute = 'value'
with open('results.csv', 'w', newline='') as csvfile :
    writer = csv.DictWriter(csvfile, fieldnames=sparqlVars)
    writer.writeheader()
    for b in bindings :
        writer.writerow({var:b[var][metaAttribute] for var in sparqlVars})

And the output is:

org,orgLabel
http://www.wikidata.org/entity/Q47099,"Grupo Televisa, owner of TelevisaUnivision"
http://www.wikidata.org/entity/Q429380,Aeropuertos y Servicios Auxiliares
http://www.wikidata.org/entity/Q482267,América Móvil
...
舟遥客 2025-01-20 15:19:52

作为一个提交者
https://github.com/WolfgangFahl/pyLoDStorage

我要指出的是,SPARQL 类pyLodStorage 的明确目的是使到其他格式的转换变得简单。

pip install pyLodStorage
sparqlquery --query 'SELECT ?org ?orgLabel
WHERE
{
  ?org wdt:P31 wd:Q4830453. #instance of organizations
  ?org wdt:P17 wd:Q96. #Mexico country

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en"}
}' --format csv

结果:

"org","orgLabel"
"http://www.wikidata.org/entity/Q47099","Grupo Televisa, owner of TelevisaUnivision"
"http://www.wikidata.org/entity/Q482267","América Móvil"
"http://www.wikidata.org/entity/Q515411","Q515411"
"http://www.wikidata.org/entity/Q521673","Grupo Modelo"

当然,您可以直接通过 python API 获得相同的结果:

from lodstorage.sparql import SPARQL
from lodstorage.csv import CSV

sparqlQuery="""SELECT ?org ?orgLabel
WHERE
{
  ?org wdt:P31 wd:Q4830453. #instance of organizations
  ?org wdt:P17 wd:Q96. #Mexico country

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en"}
}"""
        sparql=SPARQL("https://query.wikidata.org/sparql")
        qlod=sparql.queryAsListOfDicts(sparqlQuery)
        csv=CSV.toCSV(qlod)
        print(csv)

As a committer of
https://github.com/WolfgangFahl/pyLoDStorage

i am going to point out that the SPARQL class of pyLodStorage is explicitly there to make conversion to other formats simple.

pip install pyLodStorage
sparqlquery --query 'SELECT ?org ?orgLabel
WHERE
{
  ?org wdt:P31 wd:Q4830453. #instance of organizations
  ?org wdt:P17 wd:Q96. #Mexico country

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en"}
}' --format csv

result:

"org","orgLabel"
"http://www.wikidata.org/entity/Q47099","Grupo Televisa, owner of TelevisaUnivision"
"http://www.wikidata.org/entity/Q482267","América Móvil"
"http://www.wikidata.org/entity/Q515411","Q515411"
"http://www.wikidata.org/entity/Q521673","Grupo Modelo"

for course you can get the same result directly via the python APIs:

from lodstorage.sparql import SPARQL
from lodstorage.csv import CSV

sparqlQuery="""SELECT ?org ?orgLabel
WHERE
{
  ?org wdt:P31 wd:Q4830453. #instance of organizations
  ?org wdt:P17 wd:Q96. #Mexico country

  SERVICE wikibase:label { bd:serviceParam wikibase:language "en"}
}"""
        sparql=SPARQL("https://query.wikidata.org/sparql")
        qlod=sparql.queryAsListOfDicts(sparqlQuery)
        csv=CSV.toCSV(qlod)
        print(csv)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文