2017-07-14 48 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')