【问题标题】:Pandas to_csv call is prepending a commaPandas to_csv 调用在逗号前面
【发布时间】:2015-08-16 19:49:04
【问题描述】:

我有一个数据文件 apples.csv,其标题如下:

"id","str1","str2","str3","num1","num2"

我用 pandas 将它读入数据框:

apples = pd.read_csv('apples.csv',delimiter=",",sep=r"\s+")

然后我对它做了一些事情,但忽略了它(我已经把它全部注释掉了,我的整体问题仍然存在,所以所说的东西在这里无关紧要)。

然后我把它保存出来:

apples.to_csv('bananas.csv',columns=["id","str1","str2","str3","num1","num2"])

现在,看看bananas.csv,它的标题是:

,id,str1,str2,str3,num1,num2

没有更多的引号(我并不关心,因为它不会影响文件中的任何内容),然后是前导逗号。 随后的行现在有一个额外的列,因此它节省了 7 列。但如果我这样做:

print(len(apples.columns))

在保存之前,它显示 6 列...

我通常使用 Java/Perl/R,对 Python 尤其是 Pandas 的经验较少,所以我不确定这是“是的,它就是这样做的”还是问题出在哪里 - 但我花了很长时间试图弄清楚这一点,但无法通过搜索找到它。

我怎样才能让它不做逗号前置,也许同样重要 - 为什么要这样做?

【问题讨论】:

    标签: python csv pandas


    【解决方案1】:

    设置index=False(默认为True,因此您会看到此输出),以便它不会将索引值保存到您的csv,请参阅docs

    所以这个:

    df = pd.DataFrame({'a':np.arange(5), 'b':np.arange(5)})
    df.to_csv(r'c:\data\t.csv')
    

    结果

    ,a,b
    0,0,0
    1,1,1
    2,2,2
    3,3,3
    4,4,4
    

    虽然这样:

    df.to_csv(r'c:\data\t.csv', index=False)
    

    结果:

    a,b
    0,0
    1,1
    2,2
    3,3
    4,4
    

    适用于您可能需要保存一些索引值的情况

    【讨论】:

    • 哇,即时响应和信息丰富 - 谢谢。在来到这里之前,我已经阅读了那个链接上的文档,但是那个值和那里的描述符似乎并没有很好地表明你在这里描述的内容。非常感谢您的澄清!
    • 关于引用,您可以通过quoting=1 为所有内容添加引号或quoting=2 仅用于str 值,默认为csv.QUOTE_MINIMAL,与quoting=3 相同。如果我的回答完全解决了你的问题,那么你可以接受,我的回答左上角会有一个空的勾号,谢谢
    • 我没有发生过这种情况,但这可能并不意味着太多。您是否在数据框中相应地命名列?我不记得在写作时指定列名通常只是假设列已经正确命名:a.to_csv(f, header=True, index=False)
    • 我倾向于创建带有名称的 dfs,或者我的 csv 倾向于有一个标题行。当调用to_csv 时,它会写入任何列名,即使您没有命名它们并且您的 csv 没有任何列名,它也会在您的 df 中具有来自0.....N 的自动生成的列名,与索引值相同, 如果你的 csv 没有任何你的 df 将有一个自动生成的
    猜你喜欢
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 2014-12-23
    相关资源
    最近更新 更多