使用 pandas python 从地理名称导入文本文件

Import text file from geonames using pandas python

我从 geonames 下载了一个国家数据集,并且 我使用这一行将数据集解析为列:

data = pd.read_csv("C:/Users/Documents/TR.txt", sep="\t", header = None)

但出于某种原因,这并没有正确解析所有行。大多数行都已正确解析,大约 2K 行未正确解析。我使用这一行可以看到它没有被正确解析:

data.to_csv("C:/Users/Documents/output.csv")

然后我在 excel 中打开了 output.csv,发现有些行没有被解析。 但是当我打开 excel 上的原始 TR.txt 数据集并使用制表符分隔符时,所有行都正确显示为已解析。所以我在我的 python 代码中做错了什么,但我不知道是什么。 我输出的数据集错了吗?? 谢谢

始终阅读 readme.txt 文件。

在这种特殊情况下,有两个值得注意的问题。

1) 高度(第 15 列)应为 int,但包含空白。如果将 int 指定为数据类型,则会产生错误,因为 int 没有 NaN 值。解决方法是将其转换为浮点数。如果你真的想要一个 int,那么为缺失的字段创建一个标记值(例如 -99999),用这个值 fillna(),然后转换为一个 int。

2) 某些列包含以逗号分隔的列表(例如第 3 列,备用名称)。当您使用 data.to_csv("C:/Users/Documents/output.csv") 时,您破坏了制表符分隔的解析。您需要指定 sep='\t'.

dtypes_dict = {
    0: int, # geonameid
    1: unicode,  # 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
}

data = pd.read_csv("TR.txt", sep="\t", header = None, dtype=dtypes_dict)
data.to_csv('output.txt', sep='\t')

我没有分析最终日期列,因为它可能不相关。