我从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代码中做错了但我无法弄清楚是什么。
我输错了数据集吗?
谢谢
答案 0 :(得分:3)
请务必阅读readme.txt文件。
在这种特殊情况下,有两个值得注意的问题。
1)高程(第15列)预期为int,但包含空格。如果指定int作为数据类型,则会生成错误,因为int没有NaN值。解决方法是将其转换为浮点数。如果你真的想要一个int,那么为缺少的字段(例如-99999)创建一个sentinal值,用这个值创建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')
我没有解析最终日期列,因为它可能不相关。