python - 在 Python Pandas DataFrame 中保留列顺序

标签 python pandas

有没有办法在使用 Python Pandas 读写时保留 csv 文件中列的顺序?例如,在这段代码中

import pandas as pd

data = pd.read_csv(filename)
data.to_csv(filename)

输出文件可能不同,因为未保留列。

最佳答案

当前版本的 Pandas ('0.11.0') 中似乎存在一个错误,这意味着 Matti John 的答案将不起作用。如果您指定用于写入文件的列,它们将按字母顺序写入,但只是根据 cols 中的列表重新标记。例如这段代码:

import pandas
dfdict={}
dfdict["a"]=[1,2,3,4]
dfdict["b"]=[5,6,7,8]
dfdict["c"]=[9,10,11,12]
df=pandas.DataFrame(dfdict)
df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"])

导致这个(不正确的)输出:

    b   a   c
0   1   5   9
1   2   6   10
2   3   7   11
3   4   8   12

你可以通过执行来查看你安装了哪个版本的pandas:

pandas.version.version

to_csv 的文档是 here

实际上,这似乎是一个已知错误,将在即将发布的版本 (0.11.1) 中修复:

https://github.com/pydata/pandas/issues/3489

更新:仍然没有新版本的 pandas,但这里描述了一种解决方法,不需要使用不同版本的 pandas:

github.com/pydata/pandas/issues/3454

因此将上面代码块中的最后一行更改为以下内容将正常工作:

df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"], engine='python')

更新似乎参数“cols”已重命名为“columns”,并且在最新版本的 Pandas 中,参数“engine”已被弃用(不再可用)。此外,此错误已在 0.19.0 版本中修复。

关于python - 在 Python Pandas DataFrame 中保留列顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15653688/

相关文章:

用于 GPIO Led blink 的 Python 线程类

python - 使用装饰器将参数传递给 python 函数时出现问题

python - 使用 Pandas 在不同轴上绘制条形图和时间序列图

python - 将 groupby 转换为具有新列的单行

python - Django virtualenv、pythonpath 问题

python - 在 psycopg2 中使用 with 语句创建事务

python - 子列表中的平均元素

python - 如何检查系列的符号是否符合给定的符号字符串?

python - 使用 numpy.genfromtxt 读取包含逗号的字符串的 csv 文件

python - 如何获取 groupby 总计,然后计算 Pandas DataFrame 列的百分比