2017-07-14 139 views
0

我有一個單行的tsv文件。將單行tsv文件轉換爲多行tsv文件

如:

onset duration stimulus 16.100000 3.000000 tasteless 26.700000 3.000000.1 control 31.700000 ... 150.6 729.900000 3.000000.60 rinse.26 745.600000 3.000000.61 112.5cal.6 751.600000 3.000000.62 rinse.27 

0 rows × 192 columns 

我打算做的是,AFTE每三個元素,新的行字符即添加到下一行因此上述數據框中應如下所示:

onset duration stimulus 
16.100000 3.000000 tasteless 
26.700000 3.000000 control 
31.700000 3.000000 rinse 
48.400000 3.000000 tasteless 
60.000000 3.000000 tasteless 
76.600000 3.000000 tasteless 
91.300000 3.000000 tasteless 
103.900000 3.000000 0cal 
111.900000 3.000000 rinse 
127.600000 3.000000 0cal 
131.600000 3.000000 rinse 
150.2000 

我試過

"\n".join(["\t".join(df[i:i+3]) for i in range(0,len(df),3)]) 

但沒有幫助。還嘗試將dtaframe轉換爲文本,並用\n替換每個第3個\t

我們可以用熊貓來做它嗎?

回答

0

您可以在tsv中讀取,重新設置值,然後創建一個新的數據幀。

In [428]: df = pd.read_csv('test.tsv', header=None, delim_whitespace=True); df.values 
Out[428]: 
array([['onset', 'duration', 'stimulus', 16.1, 3.0, 'tasteless', 26.7, 
     '3.000000.1', 'control', 31.7, '...', 150.6, 729.9, '3.000000.60', 
     'rinse.26', 745.6, '3.000000.61', '112.5cal.6', 751.6, 
     '3.000000.62', 'rinse.27']], dtype=object) 

In [434]: cols = df.values.reshape(-1, 3) 

In [435]: df = pd.DataFrame(cols[1:], columns=cols[0]); df 
Out[435]: 
    onset  duration stimulus 
0 16.1   3 tasteless 
1 26.7 3.000000.1  control 
2 31.7   ...  150.6 
3 729.9 3.000000.60 rinse.26 
4 745.6 3.000000.61 112.5cal.6 
5 751.6 3.000000.62 rinse.27 

在此之後,回寫於TSV很簡單:

In [440]: df.to_csv('out.tsv', sep='\t')