在CSV文件中写入两个不同大小的数组数据

Write two different size array data in a CSV file

我正在从 NetCDF 文件中读取两个不同的维度数组变量(时间和一个 3 层变量)。详情如下:

>>>array(['2018-07-15 00:00:05', '2018-07-15 00:00:20',
       '2018-07-15 00:00:35', ..., '2018-07-17 23:59:29',
       '2018-07-17 23:59:44', '2018-07-17 23:59:58'], dtype='<U19')

>>>masked_array(
  data=[[ 270,  554, 2068],
        [ 270,  554, 2068],
        [ 270,  554, 2068],
        ...,
        [ 704, 1034, 1349],
        [ 704, 1019, 1349],
        [ 704, 1019, 1349]],
  mask=False,
  fill_value=999999,
  dtype=int16)

我想在 .csv 的 4 列中用 header 写上面的两个变量:'Time','Layer1','Layer2','Layer3'。如下所示,

Date                    Layer1  Layer2  Layer3
2018-07-17 00:00:00     210.0   1139.0  NaN
2018-07-17 00:00:00     210.0   1139.0  NaN
2018-07-17 00:00:00     210.0   1139.0  NaN
2018-07-17 00:00:00     210.0   1139.0  NaN
2018-07-17 00:01:00     210.0   1139.0  NaN
2018-07-17 00:01:00     210.0   1139.0  NaN
2018-07-17 00:01:00     210.0   1139.0  NaN
2018-07-17 00:01:00     210.0   1154.0  NaN
2018-07-17 00:02:00     210.0   1154.0  NaN
2018-07-17 00:02:00     210.0   1154.0  NaN
2018-07-17 00:02:00     210.0   1019.0  1154.0
2018-07-17 00:02:00     210.0   1019.0  1154.0

我认为这里的技巧是通过使用 left justification:

来正确设置格式
import numpy as np
times = np.array(['2018-07-15 00:00:05', '2018-07-15 00:00:20',
       '2018-07-15 00:00:35', '2018-07-17 23:59:29',
       '2018-07-17 23:59:44', '2018-07-17 23:59:58'], dtype='<U19')

data = np.ma.array(
  data=[[ 270,  554, 2068],
        [ 270,  554, 2068],
        [ 270,  554, 2068],
        [ 704, 1034, 1349],
        [ 704, 1019, 1349],
        [ 704, 1019, 1349]],
  mask=False,
  fill_value=999999,
  dtype=np.int16)

with open('data.csv', 'wt') as outfile:
    outfile.write('{:<23s} {:<7s} {:<7s} {:<7s}\n'.format(
        'Date', 'Layer1', 'Layer2', 'Layer3'))
    for t, row in zip(times, data):
        outfile.write('{:<23s} {:<7.1f} {:<7.1f} {:<7.1f}\n'.format(t, *row))