如何在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)
你的尝试代码问题说明
- 列名错误:最后一列的实际列名是
a - b > 0,不是expr,直接用data['expr']会找不到列 - 逻辑错误:
.all()是判断整列所有元素是否都为True,不是逐行判断,完全不符合你要筛选单行的需求
内容的提问来源于stack exchange,提问作者Sena j
相关产品推荐
相关产品推荐

