使用Pandas数据帧写入复杂的格式布局

时间:2016-09-01 00:14:06

标签: python pandas

我正在尝试创建一个具有非常特定格式的文件,这意味着我很难单独使用pandas进行操作和保存。

考虑一下:

FILE = open('writeFileTest' + ".trc", "w")

# Print header information
FILE.write('A\tB\tC\n')
FILE.write('\t\tD\tE\tF\tG\n')

这将生成一些看起来大致相同的标题:

A  B  C
      D  E  F  G

现在让我说我也有一个像这样的pandas数据框:

>>>import pandas as pd
>>>import numpy as np
>>>pd.DataFrame(np.random.randn(5, 6))
          0         1         2         3         4         5
0  0.215413  0.075976  0.516593  1.699469  1.382774 -0.604032
1  0.156343  0.918240  0.728018 -0.975881 -1.034713 -1.920139
2  1.486848 -0.762764 -0.232464  1.824197 -0.321638  0.187009
3 -1.125282 -0.419082  1.025092  1.381589  0.369712  0.043958
4 -0.118296  0.699864  0.796202 -0.560172 -1.046126  0.398537

如何将两者结合起来产生这个:

A         B         C
                    D         E         F         G
0.215413  0.075976  0.516593  1.699469  1.382774 -0.604032
0.156343  0.918240  0.728018 -0.975881 -1.034713 -1.920139
1.486848 -0.762764 -0.232464  1.824197 -0.321638  0.187009
-1.125282 -0.419082  1.025092  1.381589  0.369712  0.043958
0.118296  0.699864  0.796202 -0.560172 -1.046126  0.398537

我的实际文件显然比这复杂得多,这就是为什么我不能使用pandas,而且我的数据要大得多。那么,如何将这两种方法结合起来呢?我还应该提到,每个标签都以\t个标签分隔。

编辑:

还有可能在纯大熊猫中做所有这些(我想,但我显然不知道如何,因此这个问题)。

然后我们会对待这整件事:

A         B         C
                    D         E         F         G
0.215413  0.075976  0.516593  1.699469  1.382774 -0.604032
0.156343  0.918240  0.728018 -0.975881 -1.034713 -1.920139
1.486848 -0.762764 -0.232464  1.824197 -0.321638  0.187009
-1.125282 -0.419082  1.025092  1.381589  0.369712  0.043958
0.118296  0.699864  0.796202 -0.560172 -1.046126  0.398537

作为pandas数据帧foo,我们将在其上foo.to_csv(foo.csv,sep='\t')然后更改文件扩展名。但是,我们必须处理空数据帧单元并确保pandas在保存时将它们视为空。

1 个答案:

答案 0 :(得分:2)

您可以打开文件,手动编写标题然后转储数据框。试试这个:

import pandas as pd
import numpy as np

data = np.random.randint(0,10, (4,6))

df = pd.DataFrame(data, columns=list('abcdef'))

header1 = 'A\tB\tC\t\t\t\n'
header2 = '\t\tD\tE\tF\tG\n'
with open('./out.tsv','w') as fp:
    fp.write(header1)
    fp.write(header2)
    df.to_csv(fp, sep='\t', header=False, index=False)