似乎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']
是正确的选择。
答案 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=
,那么您将度过一段美好时光。