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

Python根据行值提取DataFrame行返回0行,求可行方案(禁用loc/iloc)

问题与解决方案

原始数据与需求

现有带表头col1、col2、col3、col4的DataFrame数据:

col1col2col3col4
nannanfrrt.
nanMK1fg.aa.
nan.MA1fl.f2

需求:提取包含MK1、MA1的行,并输出为以下格式:

MK1|fg|aa
MA1|fl |f2

原代码的问题

  1. 引号错误:使用了中文全角引号‘’,Python仅支持半角引号''/"",会导致匹配失败或语法错误。
  2. 逻辑错误:提取多个值时用&&(Python中逻辑与是&),且逻辑矛盾——同一行不可能同时存在MK1和MA1,应该用逻辑或|,或者用isin批量匹配。
  3. 未处理脏数据:原始数据存在多余空格、末尾点号,直接提取无法得到预期输出格式。

解决方案

1. 提取目标行(不使用loc/iloc)

方法A:用isin批量匹配目标值

targets = ['MK1', 'MA1']
filtered_df = df[(df.isin(targets)).any(axis=1)]

方法B:用逻辑或连接单个匹配条件

filtered_df = df[((df.values == 'MK1').any(axis=1)) | ((df.values == 'MA1').any(axis=1))]

2. 清洗数据并格式化输出

提取到目标行后,处理单元格的空格和末尾点号,再按要求格式输出:

# 清洗每个单元格:去首尾空格、移除末尾点号
cleaned_data = filtered_df.applymap(lambda x: x.strip().rstrip('.') if isinstance(x, str) else x)

# 按指定格式打印结果
for _, row in cleaned_data.iterrows():
    print(f"{row['col2']}|{row['col3']}|{row['col4']}")

完整可运行代码

import pandas as pd
import numpy as np

# 构造原始DataFrame
raw_data = {
    'col1': [np.nan, np.nan, 'nan.'],
    'col2': [np.nan, 'MK1  ', 'MA1'],
    'col3': [' fr ', 'fg.', 'fl.  '],
    'col4': ['rt.', 'aa.  ', 'f2']
}
df = pd.DataFrame(raw_data)

# 提取目标行
target_values = ['MK1', 'MA1']
filtered_df = df[(df.isin(target_values)).any(axis=1)]

# 清洗并输出
cleaned_df = filtered_df.applymap(lambda x: x.strip().rstrip('.') if isinstance(x, str) else x)
for _, row in cleaned_df.iterrows():
    print(f"{row['col2']}|{row['col3']}|{row['col4']}")

执行后输出:

MK1|fg|aa
MA1|fl|f2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 02:35:22