obs_lon = [sta for sta in obs_loc_df["longitude (degree)"]]
obs_lat = [sta for sta in obs_loc_df["latitude (degree)"]]

# <headingcell level=3>

# Request CSV response from collector and convert to Pandas DataFrames

# <codecell>

obs_df = []
current_speed_df = []
sta_names = []
sta_failed = []
for sta in stations:
    try:
        df = coops2df(collector, sta, sos_name, iso_start, iso_end)
    except Exception as e:
        print "Error" + str(e)
        continue

    name = df.name
    sta_names.append(name)
    #     if df.empty:
    #         sta_failed.append(name)
    #         df = DataFrame(np.arange(len(ts)) * np.NaN, index=ts.index, columns=['Observed Data'])
    #         df.name = name
    obs_df.append(df)
    obs_df[-1].name = name

    # Create a separate dataframe for only sea water speed
    current_speed_df.append(pd.DataFrame(df["sea_water_speed (cm/s)"]))
import iris
from pandas import DataFrame
from owslib.ows import ExceptionReport
from utilities import coops2df, save_timeseries

iris.FUTURE.netcdf_promote = True

log.info(fmt(' Observations (station data) '))
fname = '{:%Y-%m-%d}-OBS_DATA.nc'.format(stop)

log.info(fmt(' Downloading to file {} '.format(fname)))
data = dict()
bad_datum = []
for station in observations.station:
    try:
        df = coops2df(collector, station)
        col = 'water_surface_height_above_reference_datum (m)'
        data.update({station: df[col]})
    except ExceptionReport as e:
        bad_datum.append(station)
        name = get_coops_longname(station)
        log.warning("[{}] {}:\n{}".format(station, name, e))
obs_data = DataFrame.from_dict(data)

# Split good and bad vertical datum stations.
pattern = '|'.join(bad_datum)
if pattern:
    non_navd = observations.station.str.contains(pattern)
    bad_datum = observations[non_navd]
    observations = observations[~non_navd]
ts_rng = date_range(start=jd_start, end=jd_stop, freq='6Min')
ts = DataFrame(index=ts_rng)
print(jd_start, jd_stop)
print(len(ts))

# <markdowncell>

# Create a list of obs dataframes, one for each station:

# <codecell>

obs_df = []
sta_names = []
sta_failed = []
for sta in stations:
    b = coops2df(collector, sta, sos_name)
    name = b.name
    sta_names.append(name)
    print(name)
    if b.empty:
        sta_failed.append(name)
        b = DataFrame(np.arange(len(ts)) * np.NaN, index=ts.index, columns=['Observed Data'])
        b.name = name
    # Limit interpolation to 10 points (10 @ 6min = 1 hour).
    col = 'Observed Data'
    concatenated = concat([b, ts], axis=1).interpolate(limit=10)[col]
    obs_df.append(DataFrame(concatenated))
    obs_df[-1].name = b.name

# <codecell>
# <headingcell level=3>

# Request CSV response from collector and convert to Pandas DataFrames

# <codecell>

ts_rng = pd.date_range(start=jd_start, end=jd_stop, freq='6Min')
ts = pd.DataFrame(index=ts_rng)

obs_df = []
wind_speed_df = []
sta_names = []
sta_failed = []
for sta in stations:
    try:
        df = coops2df(collector, sta, sos_name)
    except Exception as e:
        print "Error" + str(e)
        continue

    name = df.name
    sta_names.append(name)
    if df.empty:
        sta_failed.append(name)
        df = pd.DataFrame(np.arange(len(ts)) * np.NaN,
                          index=ts.index,
                          columns=['Observed Data'])
        df.name = name
    # Limit interpolation to 10 points (10 @ 6min = 1 hour).
#     col = 'Observed Data'
#     concatenated = pd.concat([df, ts], axis=1).interpolate(limit=10)[col]
obs_lon = [sta for sta in obs_loc_df['longitude (degree)']]
obs_lat = [sta for sta in obs_loc_df['latitude (degree)']]

# <headingcell level=3>

# Request CSV response from collector and convert to Pandas DataFrames

# <codecell>

obs_df = []
current_speed_df = []
sta_names = []
sta_failed = []
for sta in stations:
    try:
        df = coops2df(collector, sta, sos_name, iso_start, iso_end)
    except Exception as e:
        print "Error" + str(e)
        continue

    name = df.name
    sta_names.append(name)
    #     if df.empty:
    #         sta_failed.append(name)
    #         df = DataFrame(np.arange(len(ts)) * np.NaN, index=ts.index, columns=['Observed Data'])
    #         df.name = name
    obs_df.append(df)
    obs_df[-1].name = name

    # Create a separate dataframe for only sea water speed
    current_speed_df.append(pd.DataFrame(df['sea_water_speed (cm/s)']))
import iris
from pandas import DataFrame
from owslib.ows import ExceptionReport
from utilities import coops2df, save_timeseries

iris.FUTURE.netcdf_promote = True

log.info(fmt(' Observations (station data) '))
fname = '{:%Y-%m-%d}-OBS_DATA.nc'.format(stop)

log.info(fmt(' Downloading to file {} '.format(fname)))
data = dict()
bad_datum = []
for station in observations.station:
    try:
        df = coops2df(collector, station)
        col = 'water_surface_height_above_reference_datum (m)'
        data.update({station: df[col]})
    except ExceptionReport as e:
        bad_datum.append(station)
        name = get_coops_longname(station)
        log.warning("[{}] {}:\n{}".format(station, name, e))
obs_data = DataFrame.from_dict(data)

# Split good and bad vertical datum stations.
pattern = '|'.join(bad_datum)
if pattern:
    non_navd = observations.station.str.contains(pattern)
    bad_datum = observations[non_navd]
    observations = observations[~non_navd]