我正在尝试创建一个具有非常特定格式的文件,这意味着我很难单独使用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在保存时将它们视为空。
答案 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)