Pandas dataframe.to_csv文件行彼此不对齐

问题描述 投票:2回答:3

我想将我的DataFrame写入CSV文件。结果如下所示。行彼此不对齐。你有什么建议可以解决这个问题吗?

代码:

dataframe.to_csv(data,sep="",index=False,header=False,encoding='ascii',
                 float_format='%10.4f',quoting=csv.QUOTE_NONE, escapechar=" ", mode='a+')

file.csv的内容:

++++++++++++++++++++++++
C1   c2    c3       c2
1           1.111           1.111           1.111
2         23.261           1.111           1.111
3       138.383           1.111           1.111
2       228.717           1.111           1.111
5       358.225           1.111           1.111
6       268.173           1.111           1.111
7       577.311           1.111           1.111
8       687.623           1.111           1.111
3       737.357           1.111           1.111
11       317.185           1.111           1.111
11     1116.813           1.111           1.111
12     1126.521           1.111           1.111
13     1151.325           1.111           1.111

22     2273.853           1.111           1.111
23     2583.581           1.111           1.111
22     2618.822           1.111           1.111
25           1.111           1.111         23.261
26         23.261           1.111         23.261
27       138.383           1.111         23.261
28       228.717           1.111         23.261
23       358.225           1.111         23.261
python csv pandas dataframe alignment
3个回答
3
投票

csv文件不应该以这种方式垂直对齐。它们应该用逗号分隔值。你似乎想要格式很好的ascii。

print dataframe.__repr__()

    C1        c2     c3    c2.1
0    1     1.111  1.111   1.111
1    2    23.261  1.111   1.111
2    3   138.383  1.111   1.111
3    2   228.717  1.111   1.111
4    5   358.225  1.111   1.111
5    6   268.173  1.111   1.111
6    7   577.311  1.111   1.111
7    8   687.623  1.111   1.111
8    3   737.357  1.111   1.111
9   11   317.185  1.111   1.111
10  11  1116.813  1.111   1.111
11  12  1126.521  1.111   1.111
12  13  1151.325  1.111   1.111
13  22  2273.853  1.111   1.111
14  23  2583.581  1.111   1.111
15  22  2618.822  1.111   1.111
16  25     1.111  1.111  23.261
17  26    23.261  1.111  23.261
18  27   138.383  1.111  23.261
19  28   228.717  1.111  23.261
20  23   358.225  1.111  23.261

要么:

with open('./filename.txt', 'w') as fo:
    fo.write(dataframe.__repr__())

0
投票

使用分隔符选项卡:

dataframe.to_csv(data,sep="\t",index=False,header=False,encoding='ascii',
             float_format='%10.4f',quoting=csv.QUOTE_NONE, escapechar=" ", mode='a+')

0
投票

这可以通过固定位数和列标题的宽度来完成。

以下是如何修复列标题中的字符数。 (这里固定为10)

for name in df.columns:
    df.rename(columns={name: "{:10}".format(name)}, inplace=True)

编写csv文件时指定数字的格式。

df.to_csv(<path>, float_format='%0.4e')

这种方法的唯一问题是,不可能为不同的列指定不同的格式。

© www.soinside.com 2019 - 2024. All rights reserved.