使用pandas python

时间:2015-12-28 18:00:50

标签: python-3.x pandas import export geonames

我从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代码中做错了但我无法弄清楚是什么。 我输错了数据集吗? 谢谢

1 个答案:

答案 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')

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