pandas to_csv header vs columns

3
似乎 pandas.to_csv 函数有两个属性执行相同的操作。也许我漏掉了什么。根据文档:
columns: 序列,可选项 要写入的列 header: boolean 或 string 列表,默认为 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个回答

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'

使用 header 函数可以更改标题,但不会更改列中的值。
sio = StringIO()
df.to_csv(sio, header=['foo', 'bar'])
sio.getvalue()
',foo,bar\n0,1111,1\n1,2111,2\n'

如果你混淆了 columns=header=,那么你会遇到麻烦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接