如何使用Pandas获取目标行上数第2行的指定元素?
如何使用Pandas获取目标行上数第2行的指定元素?
嗨,我来帮你搞定这个问题!你现在的思路是找到了所有包含truck的行,但这里有个小问题:只保留这些行的话,我们就丢失了它们在原文件里的上下文信息,自然没法拿到上数第2行的内容。所以得调整一下思路,先把整个文件的有效内容都读进DataFrame,再一步步定位目标值。
具体可以这么做:
第一步:读取所有有效行到DataFrame
首先我们要把文件里所有有用的行都读进来,同时过滤掉那些全是+的分隔行和空行:
import pandas as pd all_valid_rows = [] with open('input.txt', 'r') as data: for line in data: split_line = line.strip().split() # 跳过空行,以及全是+的分隔行 if split_line and not all(char == '+' for char in split_line[0]): all_valid_rows.append(split_line) # 把所有有效行转换成DataFrame,每一行都有对应的索引 full_df = pd.DataFrame(all_valid_rows)
第二步:定位所有含truck的行的索引
接下来,我们找到所有第二列(注意Python是0起始索引,所以列索引是1)等于truck的行的位置:
# 获取符合条件的行的索引列表 truck_row_indices = full_df[full_df[1] == 'truck'].index
第三步:获取目标行的指定元素
对每个找到的truck行索引,我们只需要减去2,就能得到“上数第2行”的索引,然后取该行的第三列(列索引是2)即可:
target_results = [] for idx in truck_row_indices: # 做个简单的越界判断,避免文件开头就出现truck的情况报错 if idx >= 2: # 取上数第2行的第3个元素 target_val = full_df.loc[idx - 2, 2] target_results.append(target_val) # 输出最终结果 print('\n'.join(target_results))
运行这段代码,就能得到你想要的beta和delta啦!
为什么要这么调整?因为你之前的代码只收集了truck行,没有保留它们在原文件中的位置,自然没法回溯到前面的行。现在把所有有效行都存在DataFrame里,就能借助Pandas的索引功能精准定位到我们需要的上下文内容。
内容来源于stack exchange
相关产品推荐
相关产品推荐

