我已经在此处看到有关此问题的一些类似问题,但是没有一个问题可以为我所遇到的确切问题提供解决方案。
我有一个美国政府区域的CSV文件,以及他们所在县的网站和其他一些信息。但是,有时一个县会在此10,000多个地区的列表中出现两次。发生这种情况时,我想从CSV中删除整行。我将如何编写可完成此任务的python脚本?
要特别清楚,我不想删除CSV中的重复行]]。我需要做的是找出是否有两行具有DUPLICATE CELL,然后删除这种情况之一。
CSV也使用python脚本编写,因此,如果可以在创建文件时更好地完成此过程,则可以。 CSV填充信息的方式是通过query.wikidata.org和SPARQL查询抓取Wikipedia。我不知道此信息是否有帮助,但也许可以对我的SPARQL查询进行调整,以消除重复项?
我当前的SPARQL查询如下:
SELECT ?item ?itemLabel ?stateLabel ?website ?population WHERE { ?item wdt:P31 wd:%s; wdt:P131 ?state; wdt:P1082 ?population; wdt:P856 ?website. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } } ORDER BY DESC(?population)
%s在for循环中被修改为该区域的唯一WikiData标识号。
这个问题似乎有一个使用python的相对简单的解决方案,但我似乎找不到答案。到前一个答案的任何答案/方向将不胜感激。这是我的第一篇文章,因此请原谅我犯的任何错误。
这是程序的代码,它使用SparqlWrapper查询网站。
from StateIDS import STATE_IDS
from SPARQLWrapper import SPARQLWrapper, JSON, XML
def main():
filePath = open("pyOutput.csv", "w", encoding='utf-8')
sparql = SPARQLWrapper("https://query.wikidata.org/sparql")
sparql.setReturnFormat(JSON)
filePath.write("State,County,Website,Population,Wikidata ID\n")
for stateID in STATE_IDS:
sparql.setQuery("""
SELECT ?item ?itemLabel ?stateLabel (GROUP_CONCAT(?website;
SEPARATOR = " ") AS ?website ?population
WHERE
{
?item wdt:P31 wd:%s;
wdt:P131 ?state;
wdt:P1082 ?population;
wdt:P856 ?website.
SERVICE wikibase:label { bd:serviceParam wikibase:language "
[AUTO_LANGUAGE],en". }
}
GROUP BY ?item ?itemLabel ?stateLabel ?population
ORDER BY DESC(?population)
""" %stateID)
results = sparql.query().convert()
for result in results["results"]["bindings"]:
wikiID = result["item"]["value"].split("/")
State = result["stateLabel"]["value"].replace(",","")
County = result["itemLabel"]["value"].replace(",","")
filePath.write(State + "," +
County + "," +
result["website"]["value"] + "," +
result["population"]["value"] + "," +
wikiID[-1] + "\n")
filePath.close()
if __name__ == "__main__":
main()
我已经在此处看到有关此问题的一些类似问题,但是没有一个问题可以为我所遇到的确切问题提供解决方案。我有整个美国政府区域的CSV文件,以及...
我不知道您正在使用什么确切的WikiData标识号,但是应该使用GROUP_CONCAT
聚合重写SPARQL查询。