'Convert NetCDF file to CSV or text using Python
I'm trying to convert a netCDF file to either a CSV or text file using Python. I have read this post but I am still missing a step (I'm new to Python). It's a dataset including latitude, longitude, time and precipitation data.
This is my code so far:
import netCDF4
import pandas as pd
precip_nc_file = 'file_path'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
nc.variables.keys()
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)
precip = nc.variables['precip'][:]
I am not sure how to proceed from here, though I understand it's a matter of creating a dataframe with pandas.
Solution 1:[1]
I think pandas.Series
should work for you to create a CSV with time, lat,lon,precip.
import netCDF4
import pandas as pd
precip_nc_file = 'file_path'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
nc.variables.keys()
lat = nc.variables['lat'][:]
lon = nc.variables['lon'][:]
time_var = nc.variables['time']
dtime = netCDF4.num2date(time_var[:],time_var.units)
precip = nc.variables['precip'][:]
# a pandas.Series designed for time series of a 2D lat,lon grid
precip_ts = pd.Series(precip, index=dtime)
precip_ts.to_csv('precip.csv',index=True, header=True)
Solution 2:[2]
import xarray as xr
nc = xr.open_dataset('file_path')
nc.precip.to_dataframe().to_csv('precip.csv')
Solution 3:[3]
Depending on your requirements, you may be able to use Numpy's savetxt
method:
import numpy as np
np.savetxt('lat.csv', lat, delimiter=',')
np.savetxt('lon.csv', lon, delimiter=',')
np.savetxt('precip.csv', precip, delimiter=',')
This will output the data without any headings or index column, however.
If you do need those features, you can construct a DataFrame and save it as CSV as follows:
df_lat = pd.DataFrame(data=lat, index=dtime)
df_lat.to_csv('lat.csv')
# and the same for `lon` and `precip`.
Note: here, I assume that the date/time index runs along the first dimension of the data.
Solution 4:[4]
alternative to xarray library:
import netCDF4
precip_nc_file = r'file_path\file_name.nc'
nc = netCDF4.Dataset(precip_nc_file, mode='r')
cols = list(nc.variables.keys())
list_nc = []
for c in cols:
list_nc.append(list(nc.variables[c][:]))
df_nc = pd.DataFrame(list_nc)
df_nc = df_nc.T
df_nc.columns = cols
df_nc.to_csv("file_path.csv", index = False)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | |
Solution 2 | Robert Davy |
Solution 3 | |
Solution 4 | Manav Patadia |