使用 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')
我没有分析最终日期列,因为它可能不相关。
我从 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')
我没有分析最终日期列,因为它可能不相关。