【问题标题】:Keeping columns in the specified order when using UseCols in Pandas Read_CSV在 Pandas Read_CSV 中使用 UseCols 时按指定顺序保持列
【发布时间】:2017-02-22 18:41:18
【问题描述】:

我有一个包含 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]。 (顺便说一下,列号可以从一个运行到另一个运行,这只是一个例子。)这是一个问题,因为其余代码具有“正确”顺序的数组,我宁愿不必重新排序所有其中。

有没有任何聪明的 pandas 方法可以按指定的顺序拉入列?任何帮助将不胜感激!

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可以重复使用相同的cols_to_use 列表来按所需顺序选择列:

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

    【讨论】:

    • 谢谢!该方法很有意义,但我认为我不能使用 cols_to_use 对其进行重新排序,因为数据框只有 5 列,因此第 5、8 和 16 列超出范围。
    • 所以我最后使用了 col_reorder = [0,1,2,4,3],即 df_ret = pd.read_csv(filepath, index_col=False, usecols=cols_to_use)[col_reorder ]。这会将它们按所需的顺序排列。
    • @AButkov,如果您在cols_to_use 列表中指定列名而不是它们的索引,我的回答将正常工作
    【解决方案2】:

    只是在这里捎带这个问题(来自 2018 年的您好)。

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

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

    【讨论】:

    • 你想做什么?这不是很清楚......您是否按特定顺序对列名进行了排序?您能否提供一个可重现的小示例(2-3 行的数据集)?
    • 嘿,澄清一下 - 我没有问题,只是修改后的答案。我发现了与 OP 相同的问题并提交了您的答案的修改版本,而无需指定标头的整数值,以防我们的 pandas 数据帧具有字符串标头值。
    • 为什么你不能简单地做pd.read_csv(filepath, index_col=False, usecols=cols_to_use)[cols_to_use] 其中cols_to_use 是标签列表(列名)。例如:cols_to_use = ['b','c','a']?如果您只需要按字典顺序对列名进行排序,我们可以这样做:pd.read_csv(filepath, index_col=False, usecols=cols_to_use).sort_index(axis=1)
    • 好问题...是的,我应该发现这一点。我将编辑我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    相关资源
    最近更新 更多