【问题标题】:Write two different size array data in a CSV file在 CSV 文件中写入两个不同大小的数组数据
【发布时间】:2020-11-30 01:51:36
【问题描述】:

我正在从 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 列中写上两个变量,标题为:'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

【问题讨论】:

  • 我会创建一个pandas DataFrame,它是to_csv 方法。看起来您正在处理地理空间数据,因此您可能还想查看geopandas.org

标签: arrays numpy csv multidimensional-array netcdf


【解决方案1】:

我认为这里的诀窍是通过使用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))

【讨论】:

  • 非常感谢。此代码运行成功,但所有数据都在 csv 文件的单列中。你能推荐我吗?
  • 好吧,我按照您在问题中提出的内容进行了操作,数据列之间没有任何逗号(CSV ==“逗号分隔值”)。尝试在 write 语句中添加一些逗号。
  • 再次感谢您。现在它正在明智地分离数据列。
猜你喜欢
  • 2022-01-12
  • 2022-01-08
  • 2017-05-18
  • 1970-01-01
  • 2021-12-16
  • 2013-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多