使用垂直/水平信息将多个表连接在一个csv文件中

时间:2017-10-29 10:13:11

标签: python r csv

我需要来自NDBC的盐度/温度数据。我已经设法下载了它,但是在csv文件中,每个浮标都有一个表,其中包含各种深度的数据(我只想要最浅的深度),其中包含lat / long坐标和每个浮标上方的时间/日/月/年等信息在垂直表中。

无论如何要创建一个表格,其中包含每个浮标的日期/时间,坐标,温度和盐度数据?

r或任何其他语言的代码(除了VBA,因为文件对于excel来说太大了!)

提前致谢!!

以下是前两个浮标的副本:

Latitude                    ,,        25.5590,decimal degrees,,
Longitude                   ,,       -66.0020,decimal degrees,,
Year                        ,,           2003,,,
Month                       ,,             11,,,
Day                         ,,              3,,,
Time                        ,,           2.97,decimal hours (UT),,
VARIABLES ,Depth     ,F,O,Temperatur ,F,O,Salinity   ,F,O,Oxygen     ,F,O,,
UNITS     ,m         , , ,degrees C ,, , ,PSS       ,, , ,ml/l      ,, , ,,
Prof-Flag ,          ,0, ,          ,0, ,          ,0, ,          ,0, ,,
         1,      2.58,0,2,   27.4173,0,2,   36.5551,0,2,     4.577,0,2,
         2,     23.64,0,2,   27.4678,0,2,   36.6834,0,2,     4.581,0,2,


----------------------------------------------------------------------------

Latitude                    ,,        26.2110,decimal degrees,,
Longitude                   ,,       -66.0072,decimal degrees,,
Year                        ,,           2003,,,
Month                       ,,             11,,,
Day                         ,,              3,,,
Time                        ,,           10.0,decimal hours (UT),,
VARIABLES ,Depth     ,F,O,Temperatur ,F,O,Salinity   ,F,O,Oxygen     ,F,O,,
UNITS     ,m         , , ,degrees C ,, , ,PSS       ,, , ,ml/l      ,, , ,,
Prof-Flag ,          ,0, ,          ,0, ,          ,0, ,          ,0, ,,
         1,      3.18,0,2,   27.5938,0,2,   36.8218,0,2,     4.563,0,2,
         2,     25.33,0,2,   27.6006,0,2,   36.8357,0,2,     4.554,0,2,

1 个答案:

答案 0 :(得分:1)

  

无论如何要创建一个表格,其中包含每个浮标的日期/时间,坐标,温度和盐度数据?

在Python中,几乎总有一种方法。对于您的数据,我不会将其称为CSV数据(尽管其数据元素在技术上用逗号分隔。)但是,如果数据 总是以相同的方式排列 < / strong>,您可以将数据按到一个更容易使用的表格中。

以单个浮标的数据为例:

Latitude                    ,,        25.5590,decimal degrees,,
Longitude                   ,,       -66.0020,decimal degrees,,
Year                        ,,           2003,,,
Month                       ,,             11,,,
Day                         ,,              3,,,
Time                        ,,           2.97,decimal hours (UT),,
VARIABLES ,Depth     ,F,O,Temperatur ,F,O,Salinity   ,F,O,Oxygen     ,F,O,,
UNITS     ,m         , , ,degrees C ,, , ,PSS       ,, , ,ml/l      ,, , ,,
Prof-Flag ,          ,0, ,          ,0, ,          ,0, ,          ,0, ,,
         1,      2.58,0,2,   27.4173,0,2,   36.5551,0,2,     4.577,0,2,
         2,     23.64,0,2,   27.4678,0,2,   36.6834,0,2,     4.581,0,2,

我们可以使用一系列步骤(在此合并为一个列表解析)以将数据转换为可理解的格式。以下行分隔每个逗号,删除空格和换行符,并保留任何不是空字符串的内容。

data = [t.strip().replace('\n', '') for t in data.split(',') if t.strip() != '']

这为我们提供了写入列表的数据,然后可以使用该列表来访问所需的数据。

['Latitude', '25.5590', 'decimal degrees', 'Longitude', '-66.0020', 'decimal degrees', 'Year', '2003', 'Month', '11', 'Day', '3', 'Time', '2.97', 'decimal hours (UT)', 'VARIABLES', 'Depth', 'F', 'O', 'Temperatur', 'F', 'O', 'Salinity', 'F', 'O', 'Oxygen', 'F', 'O', 'UNITS', 'm', 'degrees C', 'PSS', 'ml/l', 'Prof-Flag', '0', '0', '0', '0', '1', '2.58', '0', '2', '27.4173', '0', '2', '36.5551', '0', '2', '4.577', '0', '2', '2', '23.64', '0', '2', '27.4678', '0', '2', '36.6834', '0', '2', '4.581', '0', '2']

然后您可以使用索引访问您的数据。

print u"{0}: {1}".format(data[0], data [1])
print u"{0}: {1}".format(data[3], data [4])

输出:

Latitude: 25.5590
Longitude: -66.0020

此示例仅在数据始终以相同方式排列时才有效。

如果你喜欢这个结果,请使用类似上面的内容,并使用水平线描绘浮标记录,将其应用于每个浮标。

===========================

更新:略微调整列表理解以提供更清晰的输出和完整脚本,生成包含所有浮标的字典。

final_data = {}
buoy_number = 1

data = """Latitude                    ,,        25.5590,decimal degrees,,
Longitude                   ,,       -66.0020,decimal degrees,,
Year                        ,,           2003,,,
Month                       ,,             11,,,
Day                         ,,              3,,,
Time                        ,,           2.97,decimal hours (UT),,
VARIABLES ,Depth     ,F,O,Temperatur ,F,O,Salinity   ,F,O,Oxygen     ,F,O,,
UNITS     ,m         , , ,degrees C ,, , ,PSS       ,, , ,ml/l      ,, , ,,
Prof-Flag ,          ,0, ,          ,0, ,          ,0, ,          ,0, ,,
         1,      2.58,0,2,   27.4173,0,2,   36.5551,0,2,     4.577,0,2,
         2,     23.64,0,2,   27.4678,0,2,   36.6834,0,2,     4.581,0,2,


----------------------------------------------------------------------------

Latitude                    ,,        26.2110,decimal degrees,,
Longitude                   ,,       -66.0072,decimal degrees,,
Year                        ,,           2003,,,
Month                       ,,             11,,,
Day                         ,,              3,,,
Time                        ,,           10.0,decimal hours (UT),,
VARIABLES ,Depth     ,F,O,Temperatur ,F,O,Salinity   ,F,O,Oxygen     ,F,O,,
UNITS     ,m         , , ,degrees C ,, , ,PSS       ,, , ,ml/l      ,, , ,,
Prof-Flag ,          ,0, ,          ,0, ,          ,0, ,          ,0, ,,
         1,      3.18,0,2,   27.5938,0,2,   36.8218,0,2,     4.563,0,2,
         2,     25.33,0,2,   27.6006,0,2,   36.8357,0,2,     4.554,0,2,"""

raw = [t for t in data.split('----------------------------------------------------------------------------')]

for thing in raw:
    final_data[u'buoy_{0}'.format(buoy_number)] = [t.strip().replace('\n', '') for t in thing.split(',') if t.strip() != '']
    buoy_number += 1

for buoy in final_data:
    print final_data[buoy]

输出:

['Latitude', '25.5590', 'decimal degrees', 'Longitude', '-66.0020', 'decimal degrees', 'Year', '2003', 'Month', '11', 'Day', '3', 'Time', '2.97', 'decimal hours (UT)', 'VARIABLES', 'Depth', 'F', 'O', 'Temperatur', 'F', 'O', 'Salinity', 'F', 'O', 'Oxygen', 'F', 'O', 'UNITS', 'm', 'degrees C', 'PSS', 'ml/l', 'Prof-Flag', '0', '0', '0', '0', '1', '2.58', '0', '2', '27.4173', '0', '2', '36.5551', '0', '2', '4.577', '0', '2', '2', '23.64', '0', '2', '27.4678', '0', '2', '36.6834', '0', '2', '4.581', '0', '2']
['Latitude', '26.2110', 'decimal degrees', 'Longitude', '-66.0072', 'decimal degrees', 'Year', '2003', 'Month', '11', 'Day', '3', 'Time', '10.0', 'decimal hours (UT)', 'VARIABLES', 'Depth', 'F', 'O', 'Temperatur', 'F', 'O', 'Salinity', 'F', 'O', 'Oxygen', 'F', 'O', 'UNITS', 'm', 'degrees C', 'PSS', 'ml/l', 'Prof-Flag', '0', '0', '0', '0', '1', '3.18', '0', '2', '27.5938', '0', '2', '36.8218', '0', '2', '4.563', '0', '2', '2', '25.33', '0', '2', '27.6006', '0', '2', '36.8357', '0', '2', '4.554', '0', '2']