我想尝试将一系列项目上传到test.wikidate,创建该项目,然后添加一个初始P571语句。csv文件有时有日期值,有时没有。当没有给出日期值时,我想写一个占位符"some value"。
想象一下这样的数据帧:
df = {'Object': [1, 2,3], 'Date': [250,,300]}
然而,我不确定使用Pywikibot如何使用Pywikibot迭代csv文件,为每一行创建一个项目并添加一条语句。这是我写的代码:
import pywikibot
import pandas as pd
site = pywikibot.Site("test", "wikidata")
repo = site.data_repository()
df = pd.read_csv('experiment.csv')
item = pywikibot.ItemPage(repo)
for item in df:
date = df['date']
prop_date = pywikibot.Claim(repo, u'P571')
if date=='':
prop_date.setSnakType('somevalue')
else:
target = pywikibot.WbTime(year=date)
prop_date.setTarget(target)
item.addClaim(prop_date)
当我通过PAWS运行此程序时,我会得到消息:KeyError: 'date'
但我认为这里真正的问题是,我不知道如何让Pywikibot迭代数据帧的每一行,并为每个新的日期值创建一个新的声明。我会重视任何反馈或建议,以获得好的示例和文档。非常感谢!
回顾过去,解决方案是使用.iterrows((、.itertuples((或.loc[]来访问行中的值。
所以
for item in df.itertuples():
prop_date = pywikibot.Claim(repo, u'P571')
if item.date=='':
prop_date.setSnakType('somevalue')
else:
target = pywikibot.WbTime(year=date)
prop_date.setTarget(target)
item.addClaim(prop_date)