将单行tsv文件转换为多行tsv文件

时间:2017-07-14 21:13:18

标签: python pandas csv dataframe

我有一个单行的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

我们宁愿用熊猫来做吗?

1 个答案:

答案 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')