python - KeyError:“[Index(['URL'], dtype='object')] 均不在 [columns] 中”
问题描述
我正在尝试使用 Google Indexing API 通过 python 索引我的网站 URL。我对编码不太了解,所以我从一个站点复制了这段代码。
当我在 csv 格式似乎有问题之前搜索此错误代码时?
我的 csv 格式如下“url”,然后是新行(第二列为空)。
代码如下:
from oauth2client.service_account import ServiceAccountCredentials
import httplib2
import json
import pandas as pd
# https://developers.google.com/search/apis/indexing-api/v3/prereqs#header_2
JSON_KEY_FILE = "/content/astute-tractor-329613-1baed60ec1c0.json"
SCOPES = ["https://www.googleapis.com/auth/indexing"]
credentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEY_FILE, scopes=SCOPES)
http = credentials.authorize(httplib2.Http())
def indexURL(urls, http):
# print(type(url)); print("URL: {}".format(url));return;
ENDPOINT = "https://indexing.googleapis.com/v3/urlNotifications:publish"
for u in urls:
# print("U: {} type: {}".format(u, type(u)))
content = {}
content['url'] = u.strip()
content['type'] = "URL_UPDATED"
json_ctn = json.dumps(content)
# print(json_ctn);return
response, content = http.request(ENDPOINT, method="POST", body=json_ctn)
result = json.loads(content.decode())
# For debug purpose only
if("error" in result):
print("Error({} - {}): {}".format(result["error"]["code"], result["error"]["status"], result["error"]["message"]))
else:
print("urlNotificationMetadata.url: {}".format(result["urlNotificationMetadata"]["url"]))
print("urlNotificationMetadata.latestUpdate.url: {}".format(result["urlNotificationMetadata"]["latestUpdate"]["url"]))
print("urlNotificationMetadata.latestUpdate.type: {}".format(result["urlNotificationMetadata"]["latestUpdate"]["type"]))
print("urlNotificationMetadata.latestUpdate.notifyTime: {}".format(result["urlNotificationMetadata"]["latestUpdate"]["notifyTime"]))
"""
data.csv has 2 columns: URL and date.
I just need the URL column.
"""
csv = pd.read_csv("/content/indekseerida-1.csv")
csv[["URL"]].apply(lambda x: indexURL(x, http))
它给了我这些错误:
KeyError Traceback (most recent call last)
<ipython-input-8-f2bea693a148> in <module>()
44 """
45 csv = pd.read_csv("/content/indekseerida-1.csv")
---> 46 csv[["URL"]].apply(lambda x: indexURL(x, http))
/usr/local/lib/python3.7/dist-packages/pandas/core/frame.py in __getitem__(self, key)
2910 if is_iterator(key):
2911 key = list(key)
-> 2912 indexer = self.loc._get_listlike_indexer(key, axis=1, raise_missing=True)[1]
2913
2914 # take() does not accept boolean indexers
/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py in _get_listlike_indexer(self, key, axis, raise_missing)
1252 keyarr, indexer, new_indexer = ax._reindex_non_unique(keyarr)
1253
-> 1254 self._validate_read_indexer(keyarr, indexer, axis, raise_missing=raise_missing)
1255 return keyarr, indexer
1256
/usr/local/lib/python3.7/dist-packages/pandas/core/indexing.py in _validate_read_indexer(self, key, indexer, axis, raise_missing)
1296 if missing == len(indexer):
1297 axis_name = self.obj._get_axis_name(axis)
-> 1298 raise KeyError(f"None of [{key}] are in the [{axis_name}]")
1299
1300 # We (temporarily) allow for some missing keys with .loc, except in
KeyError: "None of [Index(['URL'], dtype='object')] are in the [columns]"
解决方案
只是为了修复错误,您可以更换
csv[["URL"]].apply(lambda x: indexURL(x, http))
和
indexURLNew = lambda x: indexURL(x, http)
result_iterator = map(indexURLNew, csv["URL"])
print(list(result_iterator))
result_iterator 是一个迭代器,您可以从中获取结果
推荐阅读
- python - 使用烧瓶发送json转换为mongodb
- python - AWS sagemaker 错误:predict() 得到了一个意外的关键字参数“pred_contribs”
- javascript - JS中如何引用指针?
- node.js - 如何在 Github Actions 中运行多个 Node 应用程序?
- python - 如何在 python for 循环中跳过列表中的某些元素?
- reporting-services - SSRS 2019 - 订阅电子邮件仅在附加报告时失败
- php - $result = call_user_func_array($callable, $arguments); 我错在哪里它不起作用
- wordpress - 第 1 层的菜单显示
- c - 为什么这个使用堆栈的计算器程序不起作用?它给出了一些未定义的行为,为什么?
- reactjs - 当 Oauth 重定向 url 发送 url 时,ReactRouter 不起作用