有没有办法在使用 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.version.version
to_csv 的文档在这里
实际上,这似乎是一个已知错误,将在即将发布的版本 (0.11.1) 中修复:
https://github.com/pydata/pandas/issues/3489
更新:仍然没有新版本的熊猫,但这里描述了一种解决方法,它不需要使用不同版本的熊猫:
github.com/pydata/pandas/issues/3454
因此,将上面代码块中的最后一行更改为以下内容将正常工作:
df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"], engine='python')
更新似乎参数“cols”已重命名为“columns”,并且在最新版本的熊猫中,参数“engine”已被弃用(不再可用)。此外,此错误已在版本 0.19.0 中修复。
在读取然后写入这样的 csv 文件时,通常应该保留列顺序,但如果由于某种原因它们不是您想要的顺序,您可以使用columns
关键字参数 in to_csv
。
例如,如果您有一个包含 a、b、c、d 列的 csv:
data = pd.read_csv(filename)
data.to_csv(filename, columns=['a', 'b', 'c', 'd'])
另一种解决方法是这样做:
import pandas as pd
data = pd.read_csv(filename)
data2 = df[['A','B','C']] #put 'A' 'B' 'C' in the desired order
data2.to_csv(filename)