【问题标题】:How to remove values in a certain range in csv files如何在csv文件中删除一定范围内的值
【发布时间】:2022-01-08 02:22:15
【问题描述】:

我有一个包含坐标和值的 CSV 文件,我想在一定范围内过滤它,157

我试过了

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_3_100000.csv'
f=os.path.splitext(os.path.basename(meanflowdata))
outputfile=f[0]+'_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 "# Writing output"
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])])

但是像这样,它为 X 坐标取正确的值,而为其他变量取错误的值。有没有办法在 csv 文件中只选择我的范围之间的行并将它们写回另一个文件?

【问题讨论】:

    标签: csv file range


    【解决方案1】:

    我不确切知道您的预期输出是什么或您的 csv 文件是什么样的,所以我无法给您一个确切的代码来使用,但这个代码通常可以满足您的需求:

    import csv
    
    range_start = 157.0
    range_end = 480.0
    
    with open("meanflowdata", "r") as csv_file:
        csv_reader = csv.DictReader(csv_file)
    
        with open("new_meanflowdata.csv", "w") as new_csv_file:
            fieldnames = ["x_coor", "y_coor"]
    
            csv_writer = csv.DictWriter(new_csv_file, fieldnames=fieldnames)
    
            csv_writer.writeheader()
    
            for line in csv_reader:
                if line["x_coor"] <= range_start or line["x_coor"] >= range_end:
                    del line["x_coor"]
    
                elif line["y_coor"] <= range_start or line["y_coor"] >= range_end:
                    del line["y_coor"]
    
                csv_writer.writerow(line)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-12
      • 2019-10-09
      • 2019-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多