在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))
我正在从 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))