我有一个单行的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
我打算做的是,在每三个元素后面添加一个新的行字符,即下一行,以便上面的数据框看起来如下:
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转换为文本,并将每个\t
替换为\n
。
我们宁愿用熊猫来做吗?
答案 0 :(得分: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')