首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何读取python中海啸(DART)数据的深海评估和报告

如何读取python中海啸(DART)数据的深海评估和报告
EN

Stack Overflow用户
提问于 2014-08-08 18:06:42
回答 2查看 96关注 0票数 0

我正试图用DART数据,realtime/23228.dart,用python绘制水柱高度。

代码语言:javascript
复制
 import pandas as pd
 link = "http://www.ndbc.noaa.gov/data/dart_deployment_realtime/23228.dart"
 data = pd.read_table(link)

但是数据只有一列,我无法访问独立的数据。

地点: 23228 0#科学系列: W23228 1 #YY MM DD hh mm ss T高度 2# hr m s-m 2014年08 08 06 00 00 1 2609.494 2014年08 08 05 45 00 1 2609.550 5 2014 08 08 05 30 00 1 2609.605 6 2014 08 08 05 15 00 1 2609.658 7 2014 08 08 05 00 00 1 2609.703 2014年08 08 04 45 00 1 2609.741 9 2014 08 08 04 30 00 1 2609.769 10 2014 08 08 04 15 00 1 2609.787 11 2014 08 08 04 00 00 1 2609.799 12 2014 08 08 03 45 00 1 2609.802

例如,我只想要高度值作为numpy数组,我不知道必须访问这个特定的列。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-08 18:34:47

对于纯Python (没有NumPy),我将使用csv模块:

代码语言:javascript
复制
import urllib2
import csv

u = urllib2.urlopen('http://www.ndbc.noaa.gov/data/dart_deployment_realtime/23228.dart')
r = csv.reader(r, delimiter=' ')

# skip the headers
for _ in range(3):
    next(r, None)

现在,r包含一个可迭代的程序,它为您需要的东西每次提供一行(由8个项组成的列表)。当然,如果您需要一个列表,您可以只执行list(r)

但是,由于您正在处理相当多的数据,您可能需要使用NumPy。在这种情况下:

代码语言:javascript
复制
import urllib2
import numpy as np

u = urllib2.urlopen('http://www.ndbc.noaa.gov/data/dart_deployment_realtime/23228.dart')
arr = np.loadtxt(u, skiprows=3)

这为您提供了一个92551 x 8值的数组。

然后,以NumPy数组的形式访问高度很简单:

代码语言:javascript
复制
arr[:,7]

熊猫是另一种可能,正如你正确的想法。只是一些参数的问题..。

代码语言:javascript
复制
import urllib2
import pandas as pd

link = 'http://www.ndbc.noaa.gov/data/dart_deployment_realtime/23228.dart'
df = pd.read_table(link, delimiter=r'\s+', skiprows=[1,3], header=1)

现在,您有了一个漂亮的DataFrame,它的高度是df["HEIGHT"]。(列名取自文件的第2行。)

为了阴谋..。

代码语言:javascript
复制
df["HEIGHT"].plot()

创建

(然后我猜你会问如何在X轴上得到正确的日期。)我认为这值得提出一个全新的问题。)

票数 1
EN

Stack Overflow用户

发布于 2014-08-08 18:16:56

也许您可以修改以下内容:

代码语言:javascript
复制
import urllib2, numpy
response = urllib2.urlopen('http://www.ndbc.noaa.gov/data/dart_deployment_realtime/23228.dart')
all_lines = response.read().splitlines()
lines_of_interest = all_lines[4:len(all_lines)]
heights = numpy.zeros(len(lines_of_interest), dtype=float)
for idx, line in enumerate(lines_of_interest):
    heights[idx] = float(line.split()[7])

然后:

代码语言:javascript
复制
>>> heights.shape
(92551,)

>>> heights
array([ 2609.27 ,  2609.213,  2609.153, ...,  2611.157,  2611.084,
        2611.008])

等。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25209626

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档