Python 在Pandas Read_CSV中使用UseCols时保持列的指定顺序

Python 在Pandas Read_CSV中使用UseCols时保持列的指定顺序,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个包含50列数据的csv文件。我正在使用Pandas read_csv函数拉入这些列的子集,使用usecols参数选择我想要的列: cols_to_use = [0,1,5,16,8] df_ret = pd.read_csv(filepath, index_col=False, usecols=cols_to_use) 问题是df_ret包含正确的列,但没有按照我指定的顺序。它们是按升序排列的,所以[0,1,5,8,16]。(顺便说一句,列号可以在不同的运行中更改,这只是一个示例。)这

我有一个包含50列数据的csv文件。我正在使用Pandas read_csv函数拉入这些列的子集,使用usecols参数选择我想要的列:

cols_to_use = [0,1,5,16,8]
df_ret = pd.read_csv(filepath, index_col=False, usecols=cols_to_use)
问题是df_ret包含正确的列,但没有按照我指定的顺序。它们是按升序排列的,所以[0,1,5,8,16]。(顺便说一句,列号可以在不同的运行中更改,这只是一个示例。)这是一个问题,因为代码的其余部分具有顺序“正确”的数组,我不希望对所有数组都重新排序


是否有任何方法可以按照指定的顺序拉入列?任何帮助都将不胜感激

您可以重复使用相同的
cols\u-to\u-use
列表来按所需顺序选择列:

df_ret = pd.read_csv(filepath, index_col=False, usecols=cols_to_use)[cols_to_use]

在这里简单地回答一下这个问题(大家好,2018年)

我在pandas read_csv中发现了同样的问题,并想找到一种使用列标题字符串进行[col_reorder]的方法。这就像定义要使用的字符串数组一样简单

pd.read_csv(filepath, index_col=False, usecols=cols_to_use)[index_strings]

谢谢你!这个方法很有意义,但我不认为我可以使用cols_to_use对其进行重新排序,因为数据帧只有5列,所以第5、8和16列超出了范围。因此,我将col_reorder=[0,1,2,4,3]设置为col_reorder=[0,1,2,4,3],我在最后使用了它,即df_ret=pd.read_csv(文件路径,index_col=False,usecols=cols=cols=cols_to_use)[_reorder]。这将使它们按所需顺序排列。@AButkov,如果您在
cols\u to\u use
列表中指定列名而不是它们的索引,我的答案将正常工作。您想做什么?不太清楚。。。您是否按照特定顺序对列名排序?你能提供一个小的可重复的例子(2-3行的数据集)吗?嘿,只是澄清一下-我没有问题,只是一个修改过的答案。我发现了与OP相同的问题,并提交了您的答案的修改版本,无需指定标题的整数值,以防我们的熊猫数据帧具有字符串标题值。为什么您不能简单地执行
pd.read_csv(filepath,index_col=False,usecols=cols_to_use)[cols_to_use]
其中
cols\u-to\u-use
是标签(列名)列表。例如:
cols\u to\u use=['b','c','a']
?如果您只需要按字典顺序对列名排序,我们可以这样做:
pd.read\u csv(filepath,index\u col=False,usecols=cols\u to\u use)。sort\u index(axis=1)
好问题……是的,我应该已经发现了。我将编辑我的答案。