我有多个带有多个制表符分隔列的文本文件,我想从中提取列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
预期输出df:
i B C D E F G H I J PTA K L
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.975 0.367 0.01220 0.875 0.05711 0.0365 0.49310 0.05882 0.51825 NaN 635 784 File2
我想使用python对多个文件执行此操作。目前我已经尝试了这个代码,但我不确定如何将其放入正确的循环中:
# 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)
目前,我缺少将这些行添加到新数据帧中的部分。
在迭代文件时,将带文件名的新列添加到过滤数据中,append()
将新的dataframe
添加到列表中,pd.concat()
将列表中的所有数据帧添加到
...
na_data = []
for filename in os.listdir(directory):
f = os.path.join(directory, filename)
df=pd.read_csv(f, sep='t',comment='#')
rows=df[df['PTA'].isna()]
if not rows.empty():
rows['filename'] = filename
na_data.append(rows)
pd.concat(na_data)