我有许多具有特定格式的文本文件。文本文件的每一列都分配给特定信息。没有任何真正的定界符,有时会填满整个列集,因此并不总是有空格。例如
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列中,依此类推。该单词如何在熊猫数据框中使用的上下文。抱歉造成任何混乱。
答案 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])])
使用一列创建数据框。我现在正在使用数据框将它们添加在一起,而不是添加。