You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选CSV文件中x坐标处于157~480区间的行并导出

错误原因
  • 读取CSV行时计算了判断条件mask但完全没有使用,所有行不管是否符合x坐标范围都被追加到了xd/yd等列表中
  • 对构造的Xd数组使用了np.sort,该操作会对每一列单独排序,直接破坏了原始行内各字段的对应关系
  • 后续仅对xd做了筛选,yd/zd/cd/rhod仍为全量数据,长度和筛选后的xd不一致,写入时必然出现错位
  • 原始代码存在语法错误:rows =后无赋值内容,直接运行会报错
解决方案

你需要在读取时就判断x坐标是否符合要求,仅保留符合条件的整行数据,避免后续单独处理各字段破坏对应关系。

方案1:原生csv库实现(无额外依赖)

逐行读取判断,符合条件直接写入目标文件,不需要加载全量数据,内存占用低:

import csv
import os

meanflowdata = 'fieldlp3.csv'
f = os.path.splitext(os.path.basename(meanflowdata))
outputfile = f[0] + '_cut' + f[1]
range_start = 157.0
range_end = 480.0

with open(meanflowdata, 'r', encoding='utf-8') as infile, \
     open(outputfile, 'w', encoding='utf-8', newline='') as outfile:
    reader = csv.reader(infile, delimiter=',')
    writer = csv.writer(outfile, delimiter=',')
    for row in reader:
        if len(row) > 2:
            try:
                x_val = float(row[0])
                # 满足157 < x < 480的条件就写入整行
                if range_start < x_val < range_end:
                    writer.writerow(row)
            except ValueError:
                # 跳过表头或者非数值的行,不需要的话可以删掉这个异常处理
                continue

方案2:pandas极简实现

如果允许使用第三方库,几行代码即可完成,逻辑更清晰:

import pandas as pd
import os

meanflowdata = 'fieldlp3.csv'
f = os.path.splitext(os.path.basename(meanflowdata))
outputfile = f[0] + '_cut' + f[1]

df = pd.read_csv(meanflowdata, header=None) # 如果有表头就去掉header=None
# 筛选第一列(x坐标)符合157<x<480的行,直接写入新文件
df_filtered = df[(df.iloc[:,0] > 157) & (df.iloc[:,0] < 480)]
df_filtered.to_csv(outputfile, header=False, index=False)

两种方案都直接保留整行的字段对应关系,完全不会出现错位问题。

内容的提问来源于stack exchange,提问作者Federica Tonti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 05:15:07