我正试图用DART数据,realtime/23228.dart,用python绘制水柱高度。
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数组,我不知道必须访问这个特定的列。
发布于 2014-08-08 18:34:47
对于纯Python (没有NumPy),我将使用csv模块:
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。在这种情况下:
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数组的形式访问高度很简单:
arr[:,7]熊猫是另一种可能,正如你正确的想法。只是一些参数的问题..。
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行。)
为了阴谋..。
df["HEIGHT"].plot()创建

(然后我猜你会问如何在X轴上得到正确的日期。)我认为这值得提出一个全新的问题。)
发布于 2014-08-08 18:16:56
也许您可以修改以下内容:
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])然后:
>>> heights.shape
(92551,)
>>> heights
array([ 2609.27 , 2609.213, 2609.153, ..., 2611.157, 2611.084,
2611.008])等。
https://stackoverflow.com/questions/25209626
复制相似问题