如何在三个不同列的 csv 文件中写入纬度、经度和另一个变量的值?
How to write The values of Latitude, Longitude and another variable's values in a csv file in three different columns?
我想在 csv 文件中的三个不同列中写入纬度、经度和 Air_flux 值。
这是我目前在 Python3 中完成的代码:
文件 "path" 在指定的纬度和经度上具有 "Air_Flux" 的所有值。
代码:
import numpy as np
import csv
LAT_MIN = 34.675
LAT_MAX = 38.275
LON_MIN = 124.625
LON_MAX = 130.795
path = 'BESS_PAR_Daily.A2015004.nc_output.csv' # "File That contains the Values Of Air_Flux"
flux = np.genfromtxt(path, delimiter=',') # Reading Data from File
latData = np.arange(LAT_MIN, LAT_MAX, 0.05)
lonData = np.arange(LON_MIN, LON_MAX, 0.05)
with open('data.csv', 'w') as file:
writer = csv.writer(file, delimiter=',')
for x in np.nditer(latData.T, order='C'):
for y in np.nditer(lonData.T, order='C'):
file.write(str(x))
file.write("\n")
file.write(str(y))
file.write("\n")
for fl in np.nditer(flux):
file.write(str(fl))
file.write("\n")
file.close()
我只知道在一列中存储值的方法...
但:
我想在 csv 文件中写入纬度、经度和 Air_flux 值,其中一列具有纬度值,第二列用于经度值,第三列用于 "Air_flux"
我的理解是你的数据需要格式
LAT1 LON1 FLUX1
LAT2 LON2 FLUX2
在这种情况下,您不需要多个 for 循环,您可以将所有三个数组传递给 nditer
方法,然后使用 csvwriter.writerows
将所有值写入一段。
这是一个基于您的场景的示例
import numpy as np
import csv
LAT_MIN = 34.675
LAT_MAX = 38.275
LON_MIN = 124.625
LON_MAX = 130.795
# path = 'BESS_PAR_Daily.A2015004.nc_output.csv' # "File That contains the Values Of Air_Flux"
# flux = np.genfromtxt(path, delimiter=',') # Reading Data from File
# latData = np.arange(LAT_MIN, LAT_MAX, 0.05)
# lonData = np.arange(LON_MIN, LON_MAX, 0.05)
flux = np.array([1,2,3,4,5])
latData = np.array([1,2,3,4,5])
lonData = np.array([1,2,3,4,5])
with open('data.csv', 'w') as file:
writer = csv.writer(file, delimiter=',')
for x,y,z in np.nditer([latData.T, lonData.T, flux], order='C'):
writer.writerow([x,y,z])
你也不需要 file.close()
因为 with
块会处理它
由于通量值存储在那些 Lat 和 Lons 上,在 Lon 上迭代 Lat 值后,我获取了通量上的 lat 和 lon 的索引:
writer.writerow([x, y, flux[lat.index, lon.index]])
我想在 csv 文件中的三个不同列中写入纬度、经度和 Air_flux 值。
这是我目前在 Python3 中完成的代码: 文件 "path" 在指定的纬度和经度上具有 "Air_Flux" 的所有值。
代码:
import numpy as np
import csv
LAT_MIN = 34.675
LAT_MAX = 38.275
LON_MIN = 124.625
LON_MAX = 130.795
path = 'BESS_PAR_Daily.A2015004.nc_output.csv' # "File That contains the Values Of Air_Flux"
flux = np.genfromtxt(path, delimiter=',') # Reading Data from File
latData = np.arange(LAT_MIN, LAT_MAX, 0.05)
lonData = np.arange(LON_MIN, LON_MAX, 0.05)
with open('data.csv', 'w') as file:
writer = csv.writer(file, delimiter=',')
for x in np.nditer(latData.T, order='C'):
for y in np.nditer(lonData.T, order='C'):
file.write(str(x))
file.write("\n")
file.write(str(y))
file.write("\n")
for fl in np.nditer(flux):
file.write(str(fl))
file.write("\n")
file.close()
我只知道在一列中存储值的方法... 但: 我想在 csv 文件中写入纬度、经度和 Air_flux 值,其中一列具有纬度值,第二列用于经度值,第三列用于 "Air_flux"
我的理解是你的数据需要格式
LAT1 LON1 FLUX1
LAT2 LON2 FLUX2
在这种情况下,您不需要多个 for 循环,您可以将所有三个数组传递给 nditer
方法,然后使用 csvwriter.writerows
将所有值写入一段。
这是一个基于您的场景的示例
import numpy as np
import csv
LAT_MIN = 34.675
LAT_MAX = 38.275
LON_MIN = 124.625
LON_MAX = 130.795
# path = 'BESS_PAR_Daily.A2015004.nc_output.csv' # "File That contains the Values Of Air_Flux"
# flux = np.genfromtxt(path, delimiter=',') # Reading Data from File
# latData = np.arange(LAT_MIN, LAT_MAX, 0.05)
# lonData = np.arange(LON_MIN, LON_MAX, 0.05)
flux = np.array([1,2,3,4,5])
latData = np.array([1,2,3,4,5])
lonData = np.array([1,2,3,4,5])
with open('data.csv', 'w') as file:
writer = csv.writer(file, delimiter=',')
for x,y,z in np.nditer([latData.T, lonData.T, flux], order='C'):
writer.writerow([x,y,z])
你也不需要 file.close()
因为 with
块会处理它
由于通量值存储在那些 Lat 和 Lons 上,在 Lon 上迭代 Lat 值后,我获取了通量上的 lat 和 lon 的索引:
writer.writerow([x, y, flux[lat.index, lon.index]])