有没有办法在读取和使用Python Pandas写入时保留csv文件中列的顺序?例如,在此代码中
import pandas as pd
data = pd.read_csv(filename)
data.to_csv(filename)
输出文件可能不同,因为不保留列。
答案 0 :(得分:24)
当前版本的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的文档是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中修复。
答案 1 :(得分:19)
在阅读并编写类似的csv文件时,通常应保留列顺序,但如果由于某种原因它们不符合您的要求,则可以使用columns
中的to_csv
关键字参数}。
例如,如果您的csv包含列a,b,c,d:
data = pd.read_csv(filename)
data.to_csv(filename, columns=['a', 'b', 'c', 'd'])
答案 2 :(得分:5)
另一种解决方法是:
self.storage :fog
self.fog_credentials = {
:provider => 'AWS',
:aws_access_key_id => 'youraccesskeyid',
:aws_secret_access_key => 'yourawssecretaccesskey',
:region => 'yourbucketregion'
}
self.fog_directory = "yourbucketname"