Ошибка ключа: «Ни один из [Индекс([‘URL’], dtype=’объект’)] не находится в [столбцах]»

#python #csv #google-api #google-indexing-api

Вопрос:

Я пытаюсь использовать API индексирования Google для индексирования URL-адресов моего сайта с помощью python. Я не очень разбираюсь в кодировании, поэтому скопировал этот код с одного сайта.

Когда я искал этот код ошибки, прежде чем мне показалось, что с форматом 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) lt;ipython-input-8-f2bea693a148gt; in lt;modulegt;()  44 """  45 csv = pd.read_csv("/content/indekseerida-1.csv") ---gt; 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) -gt; 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  -gt; 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) -gt; 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]"  

Ответ №1:

Просто чтобы исправить ошибку, вы можете заменить

 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-это итератор, с помощью которого вы можете получить результат