Pandas применить значение ячейки к функции geonamescache / Большой файл - PullRequest
0 голосов
/ 25 февраля 2020

новичок здесь. Я хотел бы:

Загрузка CSV (4,5 млн строк) - выполнено

Назначить столбцы - выполнено

Создать новый столбец «Поиск» - выполнено

Примените функцию к поиску, чтобы она проверяла, находится ли название города в списке городов из geonamescache. У geonamescache есть get_cities_by_name (), который должен принимать аргумент name, возвращать словарь с данными или ни одного, если не найден. У меня проблема с передачей имени в качестве аргумента для pandas apply. Любые предложения приветствуются.

import geonamescache
import pandas as pd

gc = geonamescache.GeonamesCache()
cities = gc.get_cities_by_name()


dtypes_dict = {
    0: int, # geonameid
    1: str,  # name
    2: str,  # asciiname
    3: str,  # alternatenames
    4: float, # latitude
    5: float, # longitude
    6: str, # feature class
    7: str, # feature code
    8: str, # country code
    9: str, # cc2
    10: str, # admin1 code
    11: str, # admin2 code
    12: str, # admin3 code
    13: str, # admin4 code
    14: int, # population
    15: int, # elevation
    16: int, # dem (digital elevation model)
    17: str, # timezone
    18: str # modification date yyyy-MM-dd
}

df = pd.read_csv('12.txt', sep = '\t', header = None, quoting = 3,  iterator=True, chunksize=100, engine='python', dtype=dtypes_dict, names = ['geonameid', 'name', 'asciiname', 'alternatenames', 'latitude', 'longitude', 'feature_class', 'feature_code', 'country_code', 'cc2', 'admin1_code', 'admin2_code', 'admin3_code', 'admin4_code', 'population', 'elevation', 'dem', 'timezone', 'modification_date'])


df["Search"] = df['asciiname'].apply(cities())

df.to_csv("GeoSearch.txt")

Я получаю эту ошибку

Traceback (most recent call last):
  File "C:/Users/u6022697/Documents/python work/5pandas.py", line 5, in <module>
    cities = gc.get_cities_by_name()
TypeError: get_cities_by_name() missing 1 required positional argument: 'name'

Process finished with exit code 1

1 Ответ

0 голосов
/ 25 февраля 2020

Посмотрите на ошибку. Он говорит вам, что вам нужно передать имя get_cities_by_name. Посмотрите на ваш код:

cities = gc.get_cities_by_name()

убедитесь, что имя функции не передано, и она ожидает, что имя будет передано. Попробуйте

cities = gc.get_cities_by_name("New York")
...