在使用Python Pandas进行读取和写入时,有没有办法保持csv文件中列的顺序?例如,在下面的代码中
import pandas as pd
data = pd.read_csv(filename)
data.to_csv(filename)
输出文件可能会有所不同,因为列没有保留。
发布于 2013-06-06 09:28:50
在当前版本的Pandas ('0.11.0')中似乎有一个bug,这意味着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
here是to_csv的文档
实际上,这似乎是一个已知的错误,将在即将发布的版本(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')
UPDATE似乎参数"cols“已被重命名为"columns”,并且参数"engine“在最近的pandas版本中已被弃用(不再可用)。此外,此错误已在版本0.19.0中修复。
发布于 2013-03-27 12:24:30
在读取和写入csv文件时,通常应该保留列顺序,但是如果由于某种原因,列顺序不是您想要的顺序,则可以在to_csv
中使用columns
关键字参数。
例如,如果您有一个包含a、b、c、d列的csv:
data = pd.read_csv(filename)
data.to_csv(filename, columns=['a', 'b', 'c', 'd'])
发布于 2016-01-28 02:22:11
另一种解决方法是执行以下操作:
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)
https://stackoverflow.com/questions/15653688
复制相似问题