【问题标题】:Pandas dataframe.to_csv file rows out of alignment with each otherPandas dataframe.to_csv 文件行彼此不对齐
【发布时间】:2023-03-16 13:27:01
【问题描述】:

我想将我的 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" must be an 1-character string。你用的是什么版本的熊猫?

标签: python csv pandas dataframe alignment


【解决方案1】:

使用分隔制表符:

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

【讨论】:

  • 即使使用制表符作为分隔符,我在文件中仍然有相同的输出... :(
【解决方案2】:

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

【讨论】:

  • 感谢您的回答。在 .txt 文件中,我得到了数据框的截断表示。 Line1 .........234号线
  • 同样的问题。这个答案不会保存完整的数据帧,它会压缩它,比如“数据,数据,数据......数据,数据”
【解决方案3】:

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

这是固定列标题中字符数的方法。 (这里固定为10)

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多