我有兩個tsv文件,每個文件都有標題和列。文件A具有標題:SampleID & RawReads,FileB具有標題:SampleID & ReadsPost。我想將ReadsPost附加到FileA,以便數據與正確的SampleID對齊。將列從一個tsv文件添加到另一個(unix)
我原來的計劃是在Python中使用字典來完成此操作,其中鍵是sampleID。但是,在bash中必須有一個更簡單的方法來做到這一點!
任何幫助將是偉大的!
我有兩個tsv文件,每個文件都有標題和列。文件A具有標題:SampleID & RawReads,FileB具有標題:SampleID & ReadsPost。我想將ReadsPost附加到FileA,以便數據與正確的SampleID對齊。將列從一個tsv文件添加到另一個(unix)
我原來的計劃是在Python中使用字典來完成此操作,其中鍵是sampleID。但是,在bash中必須有一個更簡單的方法來做到這一點!
任何幫助將是偉大的!
使用join
,做一個全外連接(或任何其他類型的連接):
>cat test.txt test2.txt
SampleID RawReads
1 18
2 15
5 21
7 7
SampleID ReadsPost
1 yes
3 no
4 yes
5 yes
> join -a1 -a2 test.txt test2.txt
SampleID RawReads ReadsPost
1 18 yes
2 15
3 no
4 yes
5 21 yes
7 7
注:從沒有加入文件中的-a參數打印線。爲了完成一個完整的外連接,從兩個文件中打印行,如示例所示。
使用pandas.read_csv
加載您的數據,您可能必須爲製表符分隔的工作表設置sep='\t'
。一旦你有兩個DataFrames加載,你可以使用pandas.concat
或pandas.merge
。請參閱Pandas文檔中的Merge, join, and concatenate。
比方說,你的兩個TSV」是這樣的:
文件1:
SampleID RawReads
1 18
2 15
5 21
7 7
文件2:
SampleID ReadsPost
1 yes
3 no
4 yes
5 yes
使用合併
合併可以被用來實現兩個DataFrame上的數據庫樣式連接。在我們的例子中,我們可以看到兩個DataFrame在SampleID列中不一致。如果我們要確保從兩個幀中獲得所有數據,我們將使用outer
連接。如果我們只需要一個或另一個的數據,我們可以使用right
或left
加入,這取決於我們想要保留的內容。這是一個保持一切的例子。
df1 = pd.read_csv(file1, sep='\t')
df2 = pd.read_csv(file2, sep='\t')
merge_df = pd.merge(df1, df2, how='outer', on='SampleID')
print(merge_df)
SampleID RawReads ReadsPost
0 1 18.0 yes
1 2 15.0 NaN
2 5 21.0 yes
3 7 7.0 NaN
4 3 NaN no
5 4 NaN yes
使用的毗連
的毗連可用於沿任行或列軸線延伸DataFrames。假設SampleID是您的索引,並且您只是想將file2中的值沿列軸連接到file1。例如:
df1 = pd.read_csv(file1, sep='\t', index_col='SampleID')
df2 = pd.read_csv(file2, sep='\t', index_col='SampleID')
concat_df = pd.concat([df1, df2], axis=1)
print(concat_df)
RawReads ReadsPost
SampleID
1 18.0 yes
2 15.0 NaN
3 NaN no
4 NaN yes
5 21.0 yes
7 7.0 NaN
就像我說的閱讀熊貓文檔。這是一個非常強大的庫,也是在python中處理數據的好工具。
謝謝!兩個答案都很完美。我使用了熊貓選項,因此我可以用Rawpads和ReadsPost與matplotlib構建一個分組條形圖。 –