首页 > 解决方案 > Pandas 将单元格值应用于 geonamescache 函数/大文件

问题描述

新手在这里。我想:

加载 CSV(450 万行)- 完成

分配列 - 完成

创建一个新列“搜索”- 完成

对 Search 应用一个函数,以便它检查城市名称是否在 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

标签: pythonpandasgeonames

解决方案


我不知道这是否仍然相关,但我目前也在使用 geonamescache,所以我能够遇到这个问题。但是对于任何正在寻找这个的人来说,不幸的是,他们没有这样的功能,您可以为 get_cities_by_name() 方法传递一个列表,因为它需要基于定义的单个名称您必须调用它for 循环或类似方法中的方法,以便将其用于整个列。


推荐阅读