使用 Python Pandas 按列转置和合并制表符分隔的文件
Transpose and merge a tab-separated file by column using Python Pandas
我是编码新手,目前正在学习 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)
假设您将示例数据保存到名为 '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
我是编码新手,目前正在学习 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)
假设您将示例数据保存到名为 '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