【问题标题】:Remove leading comma in header when using pandas to_csv使用 pandas to_csv 时删除标题中的前导逗号
【发布时间】:2020-05-10 20:39:43
【问题描述】:

默认情况下 to_csv 写一个类似 CSV 的格式

,a,b,c
0,0.0,0.0,0.0
1,0.0,0.0,0.0
2,0.0,0.0,0.0

但我希望它写成这样:

a,b,c
0,0.0,0.0,0.0
1,0.0,0.0,0.0
2,0.0,0.0,0.0

我如何实现这一目标?我无法设置index=False,因为我想保留索引。我只想删除前导逗号。

df = pd.DataFrame(np.zeros((3,3)), columns = ['a','b','c'])
df.to_csv("test.csv") # this results in the first example above.

【问题讨论】:

  • 您不想删除前导逗号或所有其他列都向左移动,因为 csv 是 comma-s分隔 v价值文本文件。
  • @Parfait 我上面示例中的第二个数据帧运行良好。试一试。 pd.read_csv("test.csv")(其中 test.csv 是第二个示例)。
  • 仔细查看我所提到的期望结果。 A 列不再与原始值对齐,而是向左移动,最后一列没有标题!
  • 暗示索引未命名,pd.read_csv 正确解释了该暗示。我知道这当然不是最佳实践,我不建议任何人这样做,但出于某些遗留原因,我需要这样做。 @Parfait
  • 了解但请注意,除了pandas,在其他应用程序/语言中读取此 csv(根据下面接受的答案)将导致列移位。我有一种感觉,这是一个XY Problem。您真正的问题应该是处理遗留原因!我还没有遇到过打破最佳实践的用例。祝你好运,编码愉快!

标签: python pandas dataframe export-to-csv


【解决方案1】:

可以先只写没有索引的列,然后在追加模式下写没有标题的数据:

df = pd.DataFrame(np.zeros((3,3)), columns = ['a','b','c'], index=list('XYZ'))

pd.DataFrame(columns=df.columns).to_csv("test.csv", index=False)
#alternative for empty df
#df.iloc[:0].to_csv("test.csv", index=False)
df.to_csv("test.csv", header=None, mode='a')

df = pd.read_csv("test.csv")
print (df)
     a    b    c
X  0.0  0.0  0.0
Y  0.0  0.0  0.0
Z  0.0  0.0  0.0

【讨论】:

    【解决方案2】:

    或者,尝试重置索引,使其成为数据框中的一列,名为 index。这也适用于多个索引。

    df = df.reset_index()
    df.to_csv('output.csv', index = False)
    

    【讨论】:

      【解决方案3】:

      只需为您的索引设置一个名称:df.index.name = 'blah'。此名称将显示为标题中的名字。

      import numpy as np
      import pandas as pd
      
      df = pd.DataFrame(np.zeros((3,3)), columns = ['a','b','c'])
      df.index.name = 'my_index'
      print(df.to_csv())
      

      产量

      my_index,a,b,c
      0,0.0,0.0,0.0
      1,0.0,0.0,0.0
      2,0.0,0.0,0.0
      

      但是,如果(根据您的评论)您希望标题中有 3 个逗号分隔的名称,而 csv 的行中有 4 个逗号分隔的值,则您必须手工制作。但它不符合任何 csv 标准格式。

      【讨论】:

      • 我希望标题是“a,b,c”,而不是“my_index,a,b,c”? @Parfait
      猜你喜欢
      • 1970-01-01
      • 2015-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      • 2011-04-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      相关资源
      最近更新 更多