pandas to_csv标题与列

时间:2015-07-29 09:09:42

标签: python pandas

似乎pandas.to_csv函数有两个属性可以做同样的事情。

也许我错过了什么。

来自文档:

  

列:序列,可选

     

要写的列

     

header:布尔值或字符串列表,默认为True

     

写出列名。如果给出了字符串列表,则假定它是列名称的别名

当给出列的列表时,它们将列放入我指定的顺序。

import pandas as pd
from StringIO import StringIO

df = pd.DataFrame({"foo":[1,2], "bar":[1,2]})

sio = StringIO()
df.to_csv(sio)
sio.getvalue()
',bar,foo\n0,1,1\n1,2,2\n'

sio = StringIO()
df.to_csv(sio, header=['foo', 'bar'])
sio.getvalue()
',foo,bar\n0,1,1\n1,2,2\n'
sio.close()

sio = StringIO()
df.to_csv(sio, columns=['foo', 'bar'])
sio.getvalue()
',foo,bar\n0,1,1\n1,2,2\n'
sio.close()

如果我只想对列顺序进行排序,哪一个正确要使用?

我看到这两个命名属性不同的唯一情况是,如果我想选择列,但将标题写入csv文件。

这意味着使用columns=['foo', 'bar']是正确的选择。

1 个答案:

答案 0 :(得分:2)

在写这个问题时,我意识到答案,我想我会马上分享。

我的示例数据没有显示问题

使用列,列顺序会更改,包括标题和值。

df = pd.DataFrame({"foo":[1,2], "bar":[1111,2111]})
sio = StringIO()
df.to_csv(sio, columns=['foo', 'bar'])
sio.getvalue()
',foo,bar\n0,1,1111\n1,2,2111\n'

使用标题,标题会更改,但不会更改列中的值。

sio = StringIO()
df.to_csv(sio, header=['foo', 'bar'])
sio.getvalue()
',foo,bar\n0,1111,1\n1,2111,2\n'

如果您混淆columns=header=,那么您将度过一段美好时光。