我正在尝试创建一个具有非常特定格式的文件,这意味着我很难单独使用 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
制表符分隔。
编辑:
也有可能在纯 Pandas 中完成所有这些(我认为,但我显然不知道如何做,因此这个问题)。
然后我们会处理整个事情:
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 在保存时将它们视为空。
最佳答案
您可以打开文件,手动写入 header ,然后转储数据帧。试试这个:
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)
关于python - 使用 Pandas 数据框写入复杂格式布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39260884/