如何从.txt文件的特定列创建熊猫数据框?

时间:2018-10-03 23:37:10

标签: python linux pandas dataframe text

我有许多具有特定格式的文本文件。文本文件的每一列都分配给特定信息。没有任何真正的定界符,有时会填满整个列集,因此并不总是有空格。例如

1 ALA X   4 80.8 40.6
2 VAL X 234 90.1 42.7
3 VAL X1143 95.2 47.8
...
34ALANX3324100.2345.8

第1-2列专用于从1-99开始的连续计数。第3-6列专用于标识标签。第7列是修饰符标签。第8-11列是一个数字,表示另一个序列中的值。实际含义并不重要,我只是在说明以帮助弄清楚此.txt文件的情况。

在这种情况下,我对第1-2列(值从0-99)和第8-11列(值从0-9999)感兴趣。这些值有时可能返回NaN或字母。我需要从.txt文件中提取这些列,并将其放入具有两列的pandas数据框中。必须添加我自己的定界符似乎令人讨厌。有没有办法告诉熊猫使用其中一些文本文件列创建数据框列?

我正在Linux上使用Python 3.6,pandas v0.23.4。

edit:为澄清起见,当引用.txt文件的列时,我的意思是指水平移动时光标的位置。因此,任何一行的第一个字符在第1列中,任何一行的第二个字符在第2列中,任何一行的第13个字符在第13列中,依此类推。该单词如何在熊猫数据框中使用的上下文。抱歉造成任何混乱。

2 个答案:

答案 0 :(得分:0)

在我看来,您文件中的数据位于固定宽度的列中。基于这种假设,我已经更改了您的文件,使其可以被熊猫接受,就像这样。

 1 ALA X   4 80.8 40.6
 2 VAL X 234 90.1 42.7
 3 VAL X1143 95.2 47.8
34ALAN X3324100.2345.8

然后您可以通过这种方式阅读第一和第四列。

>>> import pandas
>>> names = ['first', 'ignore', 'second']
>>> widths = [2, 7, 4]
>>> df = pandas.read_fwf('hilliard.txt', widths=widths, names=names, index_col=False)
>>> df
   first   ignore  second
0      1    ALA X       4
1      2    VAL X     234
2      3   VAL X1     143
3     34  ALAN X3    3241

(完成此操作后,您可以删除不需要的列。)

答案 1 :(得分:0)

我发现这似乎最容易理解。

for filename in glob.glob('*.pdb'):    
newfile = open((filename[:5])+".txt","a+")   
newfile.write('Residue_ID')
temporaryfile = open(filename, 'r')        
for line in temporaryfile: 

    if "CA" in line:                      
        newfile.write(line[23:26])         

    else:                                  
        pass

然后使用

filename[:10] = pd.read_csv((filename[:5])+".txt", columns = [(filename[:10])]) 

使用一列创建数据框。我现在正在使用数据框将它们添加在一起,而不是添加。