我有一个单行的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)])但无能为力。我还尝试将数据框转换为文本,并用\n替换每3个\t。
我们能不能用熊猫来做呢?
发布于 2017-07-15 05:25:53
您可以读取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')https://stackoverflow.com/questions/45111681
复制相似问题