如果特定单元格重复,则删除CSV中的整行

问题描述 投票:-1回答:1

我已经在此处看到有关此问题的一些类似问题,但是没有一个问题可以为我所遇到的确切问题提供解决方案。

我有一个美国政府区域的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文件,以及...

python string csv file-io sparql
1个回答
-1
投票

我不知道您正在使用什么确切的WikiData标识号,但是应该使用GROUP_CONCAT聚合重写SPARQL查询。

© www.soinside.com 2019 - 2024. All rights reserved.