首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >熊猫-如果列存在,请重新排列列

熊猫-如果列存在,请重新排列列
EN

Stack Overflow用户
提问于 2020-05-31 12:05:54
回答 2查看 1.8K关注 0票数 1

我有一个乱七八糟的数据序列,如果列退出,我如何重新排列它们。

代码语言:javascript
运行
复制
One      Two       Three  Six    Four     Five
1         2         3      6      4         5
1         2         3      6      4         5
...

如何按顺序排列这些列?这里的问题是,所有的六列可能并不是在所有的场合。因此,如果该列退出,我需要一个简单的行,它可以按照One Two Three Four Five Six的顺序排列。我的意思是,如果两个不在df中,那么应该是One Three Four Five Six

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-31 12:11:23

您可以按DataFrame.reindex更改顺序,然后只删除缺少的值列:

代码语言:javascript
运行
复制
df1 = (df.reindex(['One', 'Two','Three','Four','Five','Six'], axis=1)
          .dropna(how='all', axis=1))
print (df1)
   One  Three  Four  Five  Six
0    1      3     4     5    6
1    1      3     4     5    6

也可以在列中创建顺序分类,然后对列进行排序:

代码语言:javascript
运行
复制
c = ['One', 'Two','Three','Four','Five','Six']
df.columns = pd.CategoricalIndex(df.columns, categories=c, ordered=True)
df1 = df.sort_index(axis=1)
print (df1)
   One  Three  Four  Five  Six
0    1      3     4     5    6
1    1      3     4     5    6
票数 4
EN

Stack Overflow用户

发布于 2020-05-31 12:20:26

这取决于列的名称。如果它们是数字,这很容易:只需捕获列,使用内置的sorted()函数将它们排序,它们就会更改数据帧的column属性。这是一个一条龙:

代码语言:javascript
运行
复制
df.columns = sorted(df.columns)

如果列的名字是单词,那就更复杂了。您需要按顺序绘制一个将数字和它们的值关联起来的地图。例如:

代码语言:javascript
运行
复制
def word_to_number(word):
    map = {
        "one": 1
        "two" : 2
        ...
    }
    return map[word.lower()]

df.columns = sorted(df.columns, key=word_to_number)

有关sorted()https://docs.python.org/3/howto/sorting.html的更多信息,请参见这里。

与其自己编写映射本身(如果DF有太多列,或者您不确定要处理哪些列,则可能这很困难),您可以使用一个库来实现这一点,如:https://pypi.org/project/word2number/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62115968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档