Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从.txt文件的特定列创建数据帧?_Python_Linux_Pandas_Dataframe_Text - Fatal编程技术网

Python 如何从.txt文件的特定列创建数据帧?

Python 如何从.txt文件的特定列创建数据帧?,python,linux,pandas,dataframe,text,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列是表示另一序列中的值的数字。实际含义并不重要,我只是解释一下,以帮助弄清楚

我有一些特定格式的文本文件。文本文件的每一列都分配给特定的信息。没有任何真正的分隔符,有时整个列集都被填满了,因此并不总是有空白。比如说

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使用这些文本文件列中的一些创建dataframe列

我正在Linux上使用Python3.6,v0.23.4


编辑:为了澄清,当提到.txt文件的列时,我的意思是指水平移动时光标的位置。因此,任何一行的第一个字符在第1列,任何一行的第二个字符在第2列,任何一行的第十三个字符在第13列,等等。当我提到pandas时,我说的是column,我指的是在pandas数据帧中如何使用该词的上下文中的实际列。很抱歉,可能会造成混淆

在我看来,文件中的数据位于固定宽度的列中。基于这个假设,我修改了你的文件,使它能被熊猫接受,就像这样

 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

(这样做之后,您可以删除不需要的列。)

我发现这似乎是最容易理解的

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])]) 

创建具有一列的数据帧。我现在正在使用数据帧将它们添加到一起,或者什么都不添加。

我不这么认为,但是逐行解析文件似乎一点也不困难,为什么不试试呢?