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

如何用Python循环处理文本文件并提取PTA列含NaN的行

批量提取多文件中含NaN的行并添加文件名列

需求说明

我有多份制表符分隔的文本文件,需要:

  • 提取所有文件中PTA列包含NaN值的行
  • 为提取出的每一行添加对应的文件名作为额外列

示例数据

File1内容

i       B       C  D  E  F  G       H       I       J      PTA  K  L
0  0.24055  0.31092   0.03447   0.00015   0.93464   0.08232  0.52609  0.00560  0.44018  0.06337   236   770
1  0.43976  0.45359   0.01220   0.93317   0.05711   0.06316  0.49310  0.05882  0.51825  0.18522   433   573
2  0.48067  0.17356   0.96903   0.02968   0.08864   0.05567  0.30423  0.02337  0.01981  0.56240   481   525
3  0.41872  0.18580   0.00191   0.08048   0.90871   0.02035  0.23598  0.01610  0.19815  NaN   422   584

File2内容

i       B       C  D  E  F  G       H       I       J      PTA  K  L
0  0.1234  0.31092   0.356   0.00015   0.93464   0.08232  0.52609  0.5873  0.0034  0.06337   367   985
1  0.975  0.367   0.01220   0.875   0.05711   0.0365  0.49310  0.05882  0.51825  NaN   635   784
2  0.48067  0.17356   0.96903   0.02968   0.08864   0.05567  0.30423  0.02337  0.01981  0.823   956   213
3  0.41872  0.18580   0.00191   0.08048   0.90871   0.02035  0.23598  0.01610  0.19815  1.30621   678   943

期望输出

i       B       C       D       E       F       G       H       I       J  PTA    K    L filename
3  0.41872  0.18580  0.00191  0.08048  0.90871  0.02035  0.23598  0.01610  0.19815  NaN  422  584    File1
1  0.97500  0.36700  0.01220  0.87500  0.05711  0.03650  0.49310  0.05882  0.51825  NaN  635  784    File2

现有代码

# import required module
import os
import pandas as pd
# assign directory
directory = 'files'
 
for filename in os.listdir(directory):
    f = os.path.join(directory, filename)
    df=pd.read_csv(f, sep='\t',comment='#')
    print(df)
    rows=df[df['PTA'].isna()]
    print(rows)

解决方案

在现有代码基础上,添加收集筛选结果和合并数据的逻辑即可:

  1. 初始化空列表存储每个文件的筛选结果
  2. 为筛选出的行新增文件名列
  3. 循环结束后合并所有结果

完整代码

import os
import pandas as pd

# 目标文件夹路径
directory = 'files'
# 初始化空列表存储结果
result_list = []

for filename in os.listdir(directory):
    file_path = os.path.join(directory, filename)
    # 读取制表符分隔的文件
    df = pd.read_csv(file_path, sep='\t', comment='#')
    # 筛选PTA列为NaN的行
    filtered_rows = df[df['PTA'].isna()]
    # 添加文件名列(保留原始文件名)
    filtered_rows['filename'] = filename
    # 将筛选结果加入列表
    result_list.append(filtered_rows)

# 合并所有结果为一个DataFrame
final_df = pd.concat(result_list, ignore_index=False)

# 可选:查看结果或导出到文件
print(final_df)
# final_df.to_csv('filtered_result.tsv', sep='\t', index=False)

关键说明

  • filtered_rows['filename'] = filename:为筛选行添加文件名,方便溯源
  • pd.concat(result_list):将多个子DataFrame合并成完整结果
  • ignore_index=False:保留原文件的行索引,不需要可设为True

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 17:45:49