pandas:数据框为to_csv,如何设置列名

时间:2018-08-16 13:45:48

标签: python pandas csv dataframe

代码段:

import numpy as np
import pandas as pd
myseries=pd.Series(np.random.randn(5))
df=pd.DataFrame(myseries)
df.to_csv("output.csv")

输出:

      0
0    0.51..
1    0.14..
2    -0.68..
3    0.48..
4    1.89..

我希望列名是“值”而不是0。如何做到这一点?
我想应该用df.to_csv(“ output.csv”,columns = [“ values”])替换最后一条语句。但是我遇到了关键错误: u"None of [['values']] are in the [columns]" 我不知道那是什么意思。

[更新]
许多答案都表明我应该使用df.columns=['values']。好吧,这对我不起作用。我不仅关心数据帧是什么样的,还关心csv文件是什么样的。数据帧看起来没问题,但csv文件却没有。那是令人困惑的部分。

...
df.columns=["values"]
df.to_csv("output.csv")

上面写着:IOError: [Errno 13] Permission denied: 'output.csv'
然后,我使用绝对路径“ C:\ Users \ myname \ Desktop \ output.csv”,错误类似:IOError: [Errno 13] Permission denied: 'C:\\Users\\myname\\Desktop\\output.csv' 我不知道为什么会出现此错误,但这很令人困惑。
有关更多信息,我在win10上安装了anaconda-2.7。我用spyder测试了代码。

4 个答案:

答案 0 :(得分:4)

您可以在DataFrame构造函数中设置列名:

df = pd.DataFrame(myseries, columns=['values'])
df.to_csv("output.csv")

或者:

df = pd.DataFrame({'values':myseries})
print (df)
     values
0 -0.429758
1 -0.019931
2  1.189596
3  1.309223
4 -0.337061

df.to_csv("output.csv")

或在DataFrame.to_csv中设置参数header

df = pd.DataFrame(myseries)
df.to_csv("output.csv", header=['values'])

或在Series.to_csv中:

myseries.to_csv("output.csv", header=['values'])

答案 1 :(得分:4)

要将列名设置为“值”,请尝试:

    df.columns = ['values']

答案 2 :(得分:0)

它显示以下错误:

says:IOError: [Errno 13] Permission denied: 'output.csv'.

我遇到了同样的错误,问题是我已经在Excel中打开了文件,因此当我的程序想用相同的文件名写入相同的目录时,我得到了这个错误。

答案 3 :(得分:0)

处理您的问题:

  1. 列重命名 - 我在 Python 3.6+ 和兼容的 Pandas 版本上发现 df.columns = ['values'] 在输出到 csv 时工作正常。注意没有给索引列一个标题(见下面的3)

  2. 写入 output.csv 文件时的权限问题 - 这几乎总是与在电子表格或编辑器中打开 csv 文件有关。你有时也会在它说它写的地方得到一个无声的失败,但 csv 保持不变。如果失败,请检查存储文件的目录和文件权限。某些操作系统喜欢您先创建文件 (touch output.csv)。如果您从 cron 或其他批处理文件运行 python,请检查运行代码的用户并检查该用户的权限。

  3. 命名索引列 - 如果你想给索引一个名字然后使用 df.to_csv("output.csv", index_label="whatever_name_you_want")