pandas to_csv头vs列

2024-04-25 20:46:23 发布

您现在位置:Python中文网/ 问答频道 /正文

看来pandas.to-csv函数有两个属性,这两个属性做了相同的事情。

也许我错过了什么。

从文档中:

columns : sequence, optional

Columns to write

header : boolean or list of string, default True

Write out column names. If a list of string is given it is assumed to be aliases for the column names

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

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']是正确的选择。


Tags: columnscsvtopandasdf属性foobar
1条回答
网友
1楼 · 发布于 2024-04-25 20:46:23

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

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

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

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,header会更改,但不会更改列中的值。

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

如果你把columns=header=搞混了,你会过得很不愉快。

相关问题 更多 >