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

Python读取CSV文件:提取特定字符串`s,s,N,s`之后的数据

解决方案:提取CSV中特定字符串后的四列数值数据

你的现有代码存在几个问题:直接引用row但未遍历行数据,且Pandas读入的DataFrame不能直接这样判断行内容。以下是两种可行的实现方案,分别基于Pandas和纯Python,你可以根据需求选择:

方案一:使用Pandas实现(适合处理结构化数据)

import pandas as pd

# 读取CSV,不将第一行设为表头,保留所有行的原始结构
df = pd.read_csv(
    r'C:\Users\User\Documents\pythonProject\filename.csv',
    engine="python",
    sep=',',
    encoding='latin-1',
    header=None
)

# 定位以's,s,N,s'开头的行
target_rows = df[df[0].str.startswith('s,s,N,s', na=False)]

if not target_rows.empty:
    target_idx = target_rows.index[0]
    
    # 情况1:提取目标行中`s,s,N,s`之后的四列数值(即该行的第2-5列)
    current_row_data = target_rows.iloc[0][1:5].apply(pd.to_numeric, errors='coerce').dropna()
    print("目标行内的四列数值:")
    print(current_row_data)
    
    # 情况2:提取目标行之后所有行的前四列数值
    if target_idx + 1 < len(df):
        subsequent_data = df.loc[target_idx+1:, 0:4].apply(pd.to_numeric, errors='coerce').dropna(how='all')
        print("\n目标行之后的四列数值:")
        print(subsequent_data)
else:
    print("未找到包含's,s,N,s'的行")

代码说明

  • header=None:避免Pandas自动将第一行识别为表头,确保所有行都作为数据行处理
  • df[0].str.startswith(...):检查每行第一列是否以目标字符串开头,na=False跳过空值行
  • pd.to_numeric:将提取的列转为数值类型,errors='coerce'将无效值转为NaN,dropna过滤无效数据

方案二:纯Python实现(逐行处理,适合新手理解)

import csv

file_path = r'C:\Users\User\Documents\pythonProject\filename.csv'
target_data = []
found_target = False

with open(file_path, 'r', encoding='latin-1') as csv_file:
    reader = csv.reader(csv_file)
    for row in reader:
        # 找到目标行后,开始收集后续行的四列数值
        if found_target:
            try:
                # 提取前四列并转为浮点数,跳过空值
                numeric_cols = [float(col.strip()) for col in row[:4] if col.strip()]
                if numeric_cols:
                    target_data.append(numeric_cols)
            except ValueError:
                # 跳过无法转为数值的行
                continue
        
        # 检查当前行是否包含目标字符串
        if row and row[0].startswith('s,s,N,s'):
            found_target = True
            # 若需要提取目标行本身的后续四列,取消以下注释
            # try:
            #     numeric_cols = [float(col.strip()) for col in row[1:5] if col.strip()]
            #     target_data.append(numeric_cols)
            # except ValueError:
            #     pass

print("提取的数值数据:")
for item in target_data:
    print(item)

代码说明

  • 用csv.reader逐行读取文件,无需依赖Pandas
  • 通过found_target标记控制数据收集的起始点
  • try-except捕获数值转换错误,避免程序崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:02:39