Pandas dataframe.to_csv导出的文件行不对齐。

6
我想将我的DataFrame写入CSV文件。下面显示了结果。行与行之间的对齐不正确。你有什么建议来解决这个问题吗?
代码:
dataframe.to_csv(data,sep="",index=False,header=False,encoding='ascii',
                 float_format='%10.4f',quoting=csv.QUOTE_NONE, escapechar=" ", mode='a+')

文件.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
注:该文件包含一些数据,其中第一行标识每一列的名称,其余行为实际数据。

如果我尝试使用sep =""调用.to_csv(),则会出现错误:"delimiter"必须是一个字符长的字符串。您使用的pandas版本是什么? - chrisaycock
3个回答

4

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__())

2
谢谢你的回答。在 .txt 文件中,我得到了一个数据框的截断表示。第一行......第234行。 - adrian.berry
1
相同的问题。这个答案没有保存完整的数据框,它压缩了它,就像“数据、数据、数据...数据、数据”一样。 - Korzak

1
这可以通过固定数字和列标题的宽度来实现。
以下是如何固定列标题中的字符数。(这里固定为10)
for name in df.columns:
    df.rename(columns={name: "{:10}".format(name)}, inplace=True)

在编写csv文件时指定数字的格式。
df.to_csv(<path>, float_format='%0.4e')

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

0

使用制表符作为分隔符:

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

1
即使使用制表符作为分隔符,我在文件中仍然得到相同的输出... :( - adrian.berry

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接