2015-03-24 122 views
3

我想将pandas.DataFrame存储到使用空白字符对齐列的文本文件中。如果这是我的样本数据框:如何使用对齐空间chacarcters将python pandas.DataFrame写入文件?

In [1]: import numpy as np 
In [2]: import pandas as pd 
In [3]: df = pd.DataFrame(np.linspace(0,1,9).reshape(3,3)) 
In [4]: df 
Out[4]: 
     0  1  2 
0 0.000 0.125 0.250 
1 0.375 0.500 0.625 
2 0.750 0.875 1.000 
[3 rows x 3 columns] 

我想要做这样的事情:

In [5]: df.to_csv('test.txt', sep='?') 

得到这个:

In [6]: more test.txt 
    0  1  2 
0 0.0 0.125 0.25 
1 0.375 0.5 0.625 
2 0.75 0.875 1.0 

我应该使用什么样的分离?我想知道是否有办法做到这一点,而不使用\t字符。它看起来不错

0  1  2 
0 0.0  0.125 0.25 
1 0.375 0.5  0.625 
2 0.75 0.875 1.0 

但我的文本文件有制表符其他问题。

如果我使用sep=' '我得到这显然是错误的。

0 1 2 
0 0.0 0.125 0.25 
1 0.375 0.5 0.625 
2 0.75 0.875 1.0 

我知道大熊猫可以读取这样的文件,所以我认为有一种方法可以写出这样的文件。

+2

您可以使用'df.to_string(justify ='left')'并将其输出写入文件? – joris 2015-03-24 23:28:09

回答

1

这个怎么样

import numpy as np 
import pandas as pd 
import csv 

df = pd.DataFrame(np.linspace(0,1,9).reshape(3,3)) 
df.to_csv('test.txt', 
      float_format='%10.3f', sep=" ", 
      quoting=csv.QUOTE_NONE, escapechar=" ") 

它产生:

0 1 2 
0   0.000   0.125   0.250 
1   0.375   0.500   0.625 
2   0.750   0.875   1.000 

的空间数量可以通过的 '最长' 号的位数来OFC定制。

+0

这很好,但我看到两个问题。它没有将列标签与列对齐(也许这可以通过使列标签浮动来克服)。另外如果不同的列有不同数量的有效数字,处理起来会很复杂。 – 2015-03-25 15:41:38