объединить файлы CSV с xarray python - PullRequest
0 голосов
/ 01 мая 2019

У меня есть три CSV-файла, которые имеют одинаковый формат, но они предназначены для разных времен.Я создал трехмерный набор данных (datetime, lat, lon) с xarray с первым CSV-файлом.На следующем шаге я хочу объединить другие CSV-файлы в мой набор данных xr.Вы можете увидеть мои коды в следующем. Проблема : В финале xr dataset у меня есть nan значения для переменных.В чем ошибка (ы)?

Выборка данных в каждом CSV-файле в разных широтах и ​​долготах, но в одно и то же время.

Lat;Lon;Alt;# Date;UT time;Temperature;Relative Humidity;Wind speed;Wind direction;Short-wave irradiation 29.893;48.859;1;2018-01-01;01:00;290.09;59.83;1.67;174.74;0.0 29.893;48.859;1;2018-01-01;02:00;289.72;66.13;2.06;166.59;0.0 29.893;48.859;1;2018-01-01;03:00;289.34;74.27;2.5;161.42;0.0 29.893;48.859;1;2018-01-01;04:00;289.11;82.31;2.88;158.44;4.349 29.893;48.859;1;2018-01-01;05:00;289.88;84.44;2.97;158.09;118.2629 29.893;48.859;1;2018-01-01;06:00;291.48;79.04;3.36;160.37;300.52

Коды

import pandas as pd
import xarray
#import Data from .csv file
colnames = ['Lat','Lon','Alt','# Date','UT time','Temperature', 'Relative Humidity', 'Wind speed', 'Wind direction', 'Short-wave irradiation']
df = pd.read_csv('data/pnt_29.887_48.497.csv',header=0,error_bad_lines=False, names = colnames, sep=';')

# create new column based on day and time, new columnn = datetime
s = df['# Date'].astype(str).str.zfill(2) + ' ' + df['UT time'].astype(str).str.zfill(2)
df['datetime'] = pd.to_datetime(s, errors='ignore', format='%Y%m%d%H')
del df['# Date']
del df['UT time']
xr = df.set_index(['datetime', 'Lat', 'Lon']).to_xarray()

Составьте список CSV-файлов.

import os    
csv_list = []
for root, dirs, files in os.walk(r'H:\Anaconda_VSCode\Data'):
    for file in files:
        if file.endswith('.csv'):
            csv_list.append(file)

Слияние:

for file in csv_list:
    #import Data from .csv file
    colnames = ['Lat','Lon','Alt','# Date','UT time','Temperature', 'Relative Humidity', 'Wind speed', 'Wind direction', 'Short-wave irradiation']
    df = pd.read_csv('data/'+ file ,header=0,error_bad_lines=False, names = colnames, sep=';')
    # create new column based on day and time, new columnn = datetime
    s = df['# Date'].astype(str).str.zfill(2) + ' ' + df['UT time'].astype(str).str.zfill(2)
    df['datetime'] = pd.to_datetime(s, errors='ignore', format='%Y%m%d%H')
    del df['# Date']
    del df['UT time']
    xr_tmp = df.set_index(['datetime', 'Lat', 'Lon']).to_xarray()
    xr = xarray.merge([xr_tmp, xr])
    #xr = xarray.concat((xr_tmp,xr))
    del (xr_tmp)
xr

Результат со значениями nan:

<xarray.Dataset>
Dimensions:                 (Lat: 3, Lon: 3, datetime: 8760)
Coordinates:
  * Lat                     (Lat) float64 29.89 29.89 29.89
  * Lon                     (Lon) float64 48.5 48.55 48.6
  * datetime                (datetime) object '2018-01-01 01:00' ... '2018-12-31 24:00'
Data variables:
    Alt                     (datetime, Lat, Lon) float64 1.0 nan nan ... nan 1.0
    Temperature             (datetime, Lat, Lon) float64 288.4 nan ... nan 284.5
    Relative Humidity       (datetime, Lat, Lon) float64 62.27 nan ... nan 76.0
    Wind speed              (datetime, Lat, Lon) float64 2.63 nan ... nan 5.15
    Wind direction          (datetime, Lat, Lon) float64 184.7 nan ... nan 335.1
    Short-wave irradiation  (datetime, Lat, Lon) float64 0.0 nan nan ... nan 0.0
...