Python 如何将一个文本文件中的值配对在一起,并使用pandas将结果输出到单独的文件?
我有一个名为text.txt的文件,如下所示:Python 如何将一个文本文件中的值配对在一起,并使用pandas将结果输出到单独的文件?,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个名为text.txt的文件,如下所示: type iAtm clust prob atoms peak pkppms rbclust 0 5 0.84433 7.H2 8.H1' 7.67414 5.36287 pk5 7.85335 5.23688 rbclust 1 2 0.87237 7.H2 22.H1' 7.67414 5.59257
type iAtm clust prob atoms peak pkppms
rbclust 0 5 0.84433 7.H2 8.H1' 7.67414 5.36287 pk5 7.85335 5.23688
rbclust 1 2 0.87237 7.H2 22.H1' 7.67414 5.59257 pk2 7.85285 5.52444
rbclust 2 3 0.96186 9.H2 10.H1' 7.43359 5.37814 pk3 7.45819 5.42587
rbclust 3 0 0.98187 9.H2 19.H1' 7.43359 5.69108 pk0 7.45766 5.68094
rbclust 4 4 0.78836 20.H2 8.H1' 7.60157 5.36287 pk4 7.89775 5.23989
rbclust 5 1 0.88374 21.H2 22.H1' 7.95925 5.59257 pk1 8.11276 5.52142
7.H2 7.85335
8.H1' 5.23688
7.H2 7.85335
8.H1' 5.23688
7.H2 7.85285
22.H1' 5.52444
9.H2 7.45819
10.H1' 5.42587
9.H2 7.45766
19.H1' 5.68094
20.H2 7.89775
8.H1' 5.23989
21.H2 8.11276
22.H1' 5.52142
我想从原子对的atom
列中获取值。例如,在第一行中,atom列中的值是7.H2 8.H1'
,我想将它们与最后两列中的列相匹配。例如,我希望第一行(不包括标题)的示例输出如下所示:
type iAtm clust prob atoms peak pkppms
rbclust 0 5 0.84433 7.H2 8.H1' 7.67414 5.36287 pk5 7.85335 5.23688
rbclust 1 2 0.87237 7.H2 22.H1' 7.67414 5.59257 pk2 7.85285 5.52444
rbclust 2 3 0.96186 9.H2 10.H1' 7.43359 5.37814 pk3 7.45819 5.42587
rbclust 3 0 0.98187 9.H2 19.H1' 7.43359 5.69108 pk0 7.45766 5.68094
rbclust 4 4 0.78836 20.H2 8.H1' 7.60157 5.36287 pk4 7.89775 5.23989
rbclust 5 1 0.88374 21.H2 22.H1' 7.95925 5.59257 pk1 8.11276 5.52142
7.H2 7.85335
8.H1' 5.23688
7.H2 7.85335
8.H1' 5.23688
7.H2 7.85285
22.H1' 5.52444
9.H2 7.45819
10.H1' 5.42587
9.H2 7.45766
19.H1' 5.68094
20.H2 7.89775
8.H1' 5.23989
21.H2 8.11276
22.H1' 5.52142
我希望我的最终输出如下所示:
type iAtm clust prob atoms peak pkppms
rbclust 0 5 0.84433 7.H2 8.H1' 7.67414 5.36287 pk5 7.85335 5.23688
rbclust 1 2 0.87237 7.H2 22.H1' 7.67414 5.59257 pk2 7.85285 5.52444
rbclust 2 3 0.96186 9.H2 10.H1' 7.43359 5.37814 pk3 7.45819 5.42587
rbclust 3 0 0.98187 9.H2 19.H1' 7.43359 5.69108 pk0 7.45766 5.68094
rbclust 4 4 0.78836 20.H2 8.H1' 7.60157 5.36287 pk4 7.89775 5.23989
rbclust 5 1 0.88374 21.H2 22.H1' 7.95925 5.59257 pk1 8.11276 5.52142
7.H2 7.85335
8.H1' 5.23688
7.H2 7.85335
8.H1' 5.23688
7.H2 7.85285
22.H1' 5.52444
9.H2 7.45819
10.H1' 5.42587
9.H2 7.45766
19.H1' 5.68094
20.H2 7.89775
8.H1' 5.23989
21.H2 8.11276
22.H1' 5.52142
这是我目前的代码:
import pandas as pd
import os
import sys
filename = 'text.txt'
match_file = sys.argv[1]
df = pd.read_csv(filename, sep = r'\s+')
df = df.ix[:. ['Atom','avgppm']]
match = pd.read_csv(match_file, sep = r'\s+', header = None, names = ('Atom', 'exp_ppm'))
我很困惑如何使用pandas匹配每个原子和每个值,如何正确匹配
编辑:
None None
None None
None None
None None
None None
None None
None None
None None
None None
None None
None None
None None
这里有一种方法,使用
zip()
:
如果实际需要字符串而不是值列表(例如9.H2 7.45819
而不是[9.H2,7.45819]
),请将append()
行更改为:
paired.append(' '.join(a))
paired.append(' '.join(b))
这里有一种方法,使用
zip()
:
如果实际需要字符串而不是值列表(例如9.H2 7.45819
而不是[9.H2,7.45819]
),请将append()
行更改为:
paired.append(' '.join(a))
paired.append(' '.join(b))
您的输入数据真的是这样格式化的吗 如果是这样,那么指定所有列将使其更易于阅读
df = pd.read_csv(r'C:\sample_data\output\test.txt', sep=r'\s+',
names=['type', 'iAtm', 'clust', 'prob', 'atom1','atom2',
'peak1', 'peak2', 'pkppms', 'match1', 'match2'],
skiprows=1, dtype=str)
添加cols、concat、排序和写入csv:
pd.concat([(df.atom1 + ' ' + df.match1),
(df.atom2 + ' ' + df.match2)]).sort_index().to_csv('out.txt', index=False)
您的输入数据真的是这样格式化的吗 如果是这样,那么指定所有列将使其更易于阅读
df = pd.read_csv(r'C:\sample_data\output\test.txt', sep=r'\s+',
names=['type', 'iAtm', 'clust', 'prob', 'atom1','atom2',
'peak1', 'peak2', 'pkppms', 'match1', 'match2'],
skiprows=1, dtype=str)
添加cols、concat、排序和写入csv:
pd.concat([(df.atom1 + ' ' + df.match1),
(df.atom2 + ' ' + df.match2)]).sort_index().to_csv('out.txt', index=False)
嗨,谢谢你!我试图实现这个cod,但我得到了一个错误:属性错误:“DataFrame”对象没有属性“atoms”My
df是df=pd.read\u csv('text.txt',sep=r'/s+')
,我正在将它写入这样的文件:df.to\u csv('out.txt',index=False)
您的示例数据有一个名为atoms
的列。我添加了val1
和val2
列名,因为您没有为最后两个字段指定列名。检查read\u csv()
之后的df.columns
。它与示例数据中的列匹配吗?嗨,谢谢!我试图实现这个cod,但我得到了一个错误:属性错误:“DataFrame”对象没有属性“atoms”Mydf是df=pd.read\u csv('text.txt',sep=r'/s+')
,我正在将它写入这样的文件:df.to\u csv('out.txt',index=False)
您的示例数据有一个名为atoms
的列。我添加了val1
和val2
列名,因为您没有为最后两个字段指定列名。检查read\u csv()
之后的df.columns
。它与示例数据中的列匹配吗?我尝试了它,在pd.concat([df.atom1+''+df.match1),(df.atom2+'+df.match2)])行中得到一个错误,上面写着SyntaxError:invalid syntax
您缺少了一个“(“df.atom1”之前)”。抱歉,我修复了它,它运行正常,但当我查看输出时,它所说的是:None
None
None
None
。。抱歉,我将编辑问题,以便您可以看到'out.txt'文件的样子。您是否像在我的示例中那样读取了它?生成的df应该有一个0:len-1索引,nt在test.text中使用任何col。我尝试了它,我得到一个错误,在pd.concat([df.atom1+''+df.match1),(df.atom2+'+df.match2)])行上显示SyntaxError:invalid syntax
您缺少了一个“(“df.atom1”之前)”)。sort_index().to_csv('out.txt',index=False)
。抱歉,我修复了它,它运行正常,但当我查看输出时,它所说的是:None
None
None
None
。。抱歉,我将编辑问题,以便您可以看到'out.txt'文件的样子。您是否像在我的示例中那样读取了它?生成的df应该有一个0:len-1索引,not使用test.text中的任何COL。