1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137
|
Extraire serie temporelle dun fichier netcdf dans un .csv
##Modules a importer
import netCDF4
from netCDF4 import Dataset
import numpy as np
import pandas as pd
##Lire le fichier netcdf
data = Dataset(r'/gpfs/home/UDCPP/barrier_c/Test_NCO/temp_Corse_10m_201704.nc', 'r')
##Extraire lon et lat
lat = data.variables['latitude'][:]
>>> print(lat)
[[41.123375 41.123375 41.123375 ... 41.123375 41.123375 41.123375 ]
[41.1341975 41.1341975 41.1341975 ... 41.1341975 41.1341975 41.1341975]
[41.14502 41.14502 41.14502 ... 41.14502 41.14502 41.14502 ]
...
[43.26623 43.26623 43.26623 ... 43.26623 43.26623 43.26623 ]
[43.2770525 43.2770525 43.2770525 ... 43.2770525 43.2770525 43.2770525]
[43.287875 43.287875 43.287875 ... 43.287875 43.287875 43.287875 ]]
lon = data.variables['longitude'][:]
>>> print(lon)
[[ 8.218151 8.2326964 8.2472418 ... 10.1526892 10.1672346 10.18178 ]
[ 8.218151 8.2326964 8.2472418 ... 10.1526892 10.1672346 10.18178 ]
[ 8.218151 8.2326964 8.2472418 ... 10.1526892 10.1672346 10.18178 ]
...
[ 8.218151 8.2326964 8.2472418 ... 10.1526892 10.1672346 10.18178 ]
[ 8.218151 8.2326964 8.2472418 ... 10.1526892 10.1672346 10.18178 ]
[ 8.218151 8.2326964 8.2472418 ... 10.1526892 10.1672346 10.18178 ]]
##Extraire la latitude et la longitude dun site donné
lat_calvi = 42.57
lon_calvi = 8.75
##Squared difference of lat and lon
sq_diff_lat = (lat - lat_calvi)**2
sq_diff_lon = (lon - lon_calvi)**2
##Identifying the index of the minimum value for lat and lon
min_index_lat = sq_diff_lat.argmin()
min_index_lon = sq_diff_lon.argmin()
>>> print(min_index_lat)
18224
>>> print(min_index_lon)
37
temp = data.variables['TEMP'][:]
>>> print(temp)
[[[[14.295403480529785 14.60593032836914 15.037308692932129 ...
13.44691276550293 13.448591232299805 13.447751998901367]
[14.130069732666016 14.316385269165039 14.63278579711914 ...
13.44691276550293 13.448591232299805 13.447751998901367]
[14.061250686645508 14.13510513305664 14.323938369750977 ...
13.44691276550293 13.448591232299805 13.447751998901367]
...
##Creer un tableau "vide" que l'on va remplir avec les données
##date de début du tableau, index[7] + date de départ
starting_date = data.variables['time'].units[7] + '2017-04-01'
>>> starting_date
' 2017-04-01'
##date de fin du tableau, index[7] + date de fin
ending_date = data.variables['time'].units[7] + '2017-04-30'
>>> ending_date
' 2017-04-30'
date_range = pd.date_range(start = starting_date, end = ending_date)
>>> date_range
DatetimeIndex(['2017-04-01', '2017-04-02', '2017-04-03', '2017-04-04',
'2017-04-05', '2017-04-06', '2017-04-07', '2017-04-08',
'2017-04-09', '2017-04-10', '2017-04-11', '2017-04-12',
'2017-04-13', '2017-04-14', '2017-04-15', '2017-04-16',
'2017-04-17', '2017-04-18', '2017-04-19', '2017-04-20',
'2017-04-21', '2017-04-22', '2017-04-23', '2017-04-24',
'2017-04-25', '2017-04-26', '2017-04-27', '2017-04-28',
'2017-04-29', '2017-04-30'],
dtype='datetime64[ns]', freq='D')
df = pd.DataFrame(0, columns = ['temp'], index = date_range)
>>> df
temp
2017-04-01 0
2017-04-02 0
2017-04-03 0
2017-04-04 0
2017-04-05 0
2017-04-06 0
2017-04-07 0
2017-04-08 0
2017-04-09 0
2017-04-10 0
2017-04-11 0
2017-04-12 0
2017-04-13 0
2017-04-14 0
2017-04-15 0
2017-04-16 0
2017-04-17 0
2017-04-18 0
2017-04-19 0
2017-04-20 0
2017-04-21 0
2017-04-22 0
2017-04-23 0
2017-04-24 0
2017-04-25 0
2017-04-26 0
2017-04-27 0
2017-04-28 0
2017-04-29 0
2017-04-30 0
dt = np.arange(0, data.variables['time'].size)
for time_index in dt:
df.iloc[time_index] = temp[time_index,min_index_lat ,min_index_lon]
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/gpfs/apps/miniconda3/lib/python3.7/site-packages/numpy/ma/core.py", line 3188, in __getitem__
dout = self.data[indx]
IndexError: index 18224 is out of bounds for axis 1 with size 1
##Sauver la série temporelle dans un .csv
df.to_csv('temp_test.csv') |
Partager