【问题标题】:Transpose and merge a tab-separated file by column using Python Pandas使用 Python Pandas 按列转置和合并制表符分隔的文件
【发布时间】:2018-07-10 03:45:46
【问题描述】:

我是编码新手,目前正在学习 python。非常感谢您的专业知识。我有一个制表符分隔的数据文件 tsv.tab,它在第二列和第三列中有 30,000 个逗号分隔的条目,但在第一列中只有 1 个条目。每列由一个制表符分隔。该文件如下所示:

57      A,C,G,C ID1,ID2,ID3,ID4  
2079    G,C,A,T ID1,ID2,ID3,ID4     
5270    C,T,T,G ID1,ID2,ID3,ID4

请问,您能否建议一种 python 方法来读取数据、转置、合并(第 3 列,即 ID1,..)并将数据保存为制表符或逗号分隔的文件?我很乐意接受纯 python、pandas 或 numpy 的建议。输出应如下所示:

57  2079   5270 ID   
A   G      C    ID1  
C   C      T    ID2  
G   A      T    ID3  
C   T      G    ID4  

57,2079,5270,ID 
A,G,C,ID1  
C,C,T,ID2  
G,A,T,ID3  
C,T,G,ID4  

到目前为止,我已经尝试如下使用pandas。

import pandas as pd  
df = pd.read_csv('tsv.tab', delimiter= '\t', header=None)
df.transpose().to_csv('tsv.csv', header = False, index=False)  

【问题讨论】:

  • 嗨 sda11,我尝试了很多 bash 工具都没有成功。我将展示我所做的,但没有成功使用 pandas。

标签: python pandas numpy transpose array-merge


【解决方案1】:

假设您将示例数据保存到名为“test.txt”的文件中,您可以这样做:

df = pd.read_csv('test.txt',header=None,sep='\s+')

result = (
    df[1].str.split(',',expand=True)
    .T
    .pipe(lambda x: x.rename(columns=dict(zip(x.columns,df[0]))))
    .assign(ID=df[2].iloc[0].split(','))
    )

result
Out[119]: 
  57 2079 5270   ID
0  A    G    C  ID1
1  C    C    T  ID2
2  G    A    T  ID3
3  C    T    G  ID4

【讨论】:

    猜你喜欢
    • 2017-11-25
    • 2018-03-06
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-10
    相关资源
    最近更新 更多