Cómo eliminar valores dentro de un rango específico en los archivos csv.
Tengo un archivo CSV con coordenadas y valores y quiero filtrarlo en un rango específico, con 157<x<480.
Intenté esto:
import numpy as np
from scipy.spatial import cKDTree as KDTree
import csv
import sys
import os
from scipy.interpolate import griddata
meanflowdata='fieldlp3.csv' #../Mean Flow Data/hcmd<em>3</em>100000.csv
f=os.path.splitext(os.path.basename(meanflowdata))
outputfile=f[0]+'<em>cut' + f[1]
xd=[]
yd=[]
zd=[]
cd=[]
rhod=[]
range_start=157.0
range_end=480.0
with open(meanflowdata,'rb') as csvfile:
spamreader=csv.reader(csvfile, delimiter=',')
for row in spamreader:
if len(row)>2:
mask = np.logical_and(float(row[0])>=range_start, float(row[0])<=range_end)
rows =
xd.append(float(row[0]))
yd.append(float(row[1]))
zd.append(float(row[2]))
rhod.append(float(row[3]))
cd.append(float(row[4]))
Xd=np.sort(np.asarray([xd,yd,zd,cd,rhod]))
print
mask = np.logical_and(Xd.T[:,0]>=range_start, Xd.T[:,0]<=range_end)
xd = Xd.T[:,0][mask]
print "# Escribiendo salida"
with open(outputfile, 'wb') as csvfile:
spamwriter = csv.writer(csvfile, delimiter=',')
for i in range(len(xd)):
spamwriter.writerow([str(xd[i]),str(yd[i]),str(zd[i]),str(cd[i]),str(rhod[i])])
pero así toma los valores correctos para la coordenada X y los valores incorrectos para las otras variables. ¿Hay alguna manera de seleccionar en el archivo CSV solo las filas entre mi rango y escribirlas en otro archivo?
davy.ai
Sí, hay una forma de seleccionar solo las filas que caen dentro del rango deseado y escribirlas en un nuevo archivo CSV. Aquí está una versión actualizada de su código que debería lograr esto:
Este código define una función auxiliar
filter_rows
que verifica si la coordenada x de una fila cae dentro del rango deseado. Luego lee los datos del CSV y filtra las filas que no cumplen esta condición, almacenando las filas restantes en una lista. Finalmente, escribe las filas filtradas en un nuevo archivo CSV con el mismo encabezado que el archivo original.