如果数据是固定宽度,那么有很多关于如何读取缺少值的空格分隔数据的好信息
我目前正试图阅读日本气象局的台风历史数据,该数据应该有this format,但实际上没有:
# Header rows:
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|
AAAAA BBBB CCC DDDD EEEE F G HHHHHHHHHHHHHHHHHHHH IIIIIIII
# Data rows:
5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80
::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|::::+::::|
AAAAAAAA BBB C DDD EEEE FFFF GGG HIIII JJJJ KLLLL MMMM P
它与美国国家海洋和大气管理局的飓风最佳路径数据非常相似,只是它用逗号分隔,缺少的值是-999或NaN,这简化了数据的读取。此外,日本的数据实际上并不遵循广告的格式。例如,数据行中的列FFFF
并不总是具有宽度4。有时它的宽度为3
我必须说,我完全不知道如何将这些数据处理成数据帧。我研究了pd.read_fwf
方法,最初它看起来很有希望,直到我发现格式错误的列和两种不同的行类型
我如何清理这些数据并将其放入数据框?我只想找到一个不同的数据集,但老实说,我在其他地方找不到任何全面的台风数据
以下是我最终如何做到这一点的。密钥意识到数据中有两种类型的行,但在每种类型中,列的宽度是固定的:
所以,事情是这样的。我编写了这两个函数来帮助我重新格式化文本文件int CSV格式:
在格式字符串上测试函数时,我们看到逗号被放在适当的位置:
因此,接下来将这些函数应用于
.txt
,并使用输出创建一个.csv
文件:下一个任务是向所有行添加标题数据,以便所有行具有相同的格式:
这会产生一些格式良好的数据,如:
有人可能有同样的问题,并为此创建了一个库,您可以在此处查看: https://github.com/miniufo/besttracks
它还包括一个快速启动笔记本,可以加载相同的数据集
我在这里对你们有点深入,因为我假设你们是以科学的名义做这件事的,如果我能帮助一些试图理解气候变化的人,那么这是一个很好的理由
在查看数据之后,我注意到问题与存储在非规范化结构中的数据有关。有两种方法可以让你从我的头脑中直接解决这个问题。我将展示将文件重新写入另一个文件以加载到pandas或dask中,因为这可能是思考它的最简单的方法(但对于那些在评论中不可避免地会烤到我的人来说肯定不是最有效的方法)
将其视为两个独立的表,具有一对多的关系。1个台风表和另一个台风数据表
一种体面但并非真正有效的方法是将其重写为更好的嵌套结构,如JSON。然后使用它加载数据。请注意两种不同类型的列
步骤1:映射出数据
这里一张桌子里有两张桌子。每个台风都将显示为一行,如下所示:
66666 9119 150 0045 9119 0 6 MIRREILE 19920701
而该台风的记录将跟随该行(将其视为单独的一行:
20080100 002 3 178 1107 994 035 00000 0000 30600 0200
加载文件,将其作为原始行读取。通过使用.readlines() method,我们可以将中的每一行作为列表中的一项读取
现在我们已经读入了,我们需要执行一些逻辑来将一些行与其他行分开。似乎每次有台风记录时,该行前面都会有一个“66666”,所以让我们把它去掉。因此,考虑到我们在一个效率极低的循环中查看每一行,我们可以编写一些if/else逻辑来查看:
现在,这将是一个非常可靠的分离逻辑的方法,这将有助于指导拆分逻辑。现在,我们需要编写一个循环来检查每一行的逻辑:
最后,我们需要编写一些逻辑,以便在write_typhone()函数中的if/then循环中以某种方式提取数据。我不想在这里做很多思考,而是选择了我能做的最简单的方法:自己定义fwf元数据。因为“yolo”:
好吧,我花了比我愿意承认的时间更长的时间。我不会说谎。给了我写COBOL程序的PTSD闪回
不管怎样,现在我们有了一个很好的嵌套数据结构,它是本机python类型的。乐趣就可以开始了
步骤2:将其加载到可用格式中
为了分析它,我假设你会想在熊猫身上看到它(如果它太大的话,也许是达斯克)。下面是我在这方面的想法:
在本question的答案中可以找到一个很好的参考(特别是第二个,而不是选定的一个)
现在就把它们放在一起:
相关问题 更多 >
编程相关推荐