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

如何在Python中从CSV文件提取最后一列值为1的行?

问题描述

我用代码生成了对应表达式的ASCII格式表格并保存为tables.csv,示例内容如下:

+-----+-----+----------------------------+
| a   | b   | a - b > 0                  |
+-----+-----+----------------------------+
|  0  |  0  |             0              |
|  0  |  1  |             0              |
|  1  |  0  |             1              |
|  1  |  1  |             0              |
+-----+-----+----------------------------+

生成代码:

t = tx(expr,variables)
table = str(t)
with open('tables.csv', 'w') as f: 
     mytable = f.write(table)
data = pandas.read_csv('tables.csv') 

现在需要移除最后一列值为0的行,只保留值为1的行,我的尝试代码逻辑不对,求正确实现:

if (data.iloc[(data['expr'].to_numpy().astype(bool)).all() == 1]):
    print('last col',(data['expr'].to_numpy().astype(bool).all()))
解决方案

第一步:先正确读取非标准格式的表格

你生成的tables.csv是ASCII表格(带+分割线、|列分隔),不是标准CSV,直接用pandas.read_csv会读入无效行和错误格式。先处理文本格式再转为DataFrame:

import pandas as pd

# 读取文件并过滤无效行
with open('tables.csv', 'r') as f:
    # 去掉空行和以+开头的分隔线行
    valid_lines = [line.strip() for line in f if line.strip() and not line.startswith('+')]

# 解析表头
header = [col.strip() for col in valid_lines[0].split('|') if col.strip()]
# 解析数据行
data_rows = []
for line in valid_lines[1:]:
    row = [col.strip() for col in line.split('|') if col.strip()]
    data_rows.append(row)

# 转为DataFrame并转成数值类型
df = pd.DataFrame(data_rows, columns=header)
df = df.apply(pd.to_numeric)

第二步:筛选最后一列值为1的行

直接定位最后一列,逐行判断值是否为1即可,不需要复杂的numpy转换:

# 获取最后一列的列名
last_column = df.columns[-1]
# 筛选符合条件的行
filtered_df = df[df[last_column] == 1]

# 可选:保存筛选后的结果到新文件
filtered_df.to_csv('filtered_table.csv', index=False)
# 或者打印结果
print(filtered_df)

你的尝试代码问题说明

  1. 列名错误:最后一列的实际列名是a - b > 0,不是expr,直接用data['expr']会找不到列
  2. 逻辑错误:.all()是判断整列所有元素是否都为True,不是逐行判断,完全不符合你要筛选单行的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 19:10:59